2017-08-31 3 views
1

Je veux juste vérifier si mes requêtes PHP-MYSQL sont sûres (si je le fais), j'utilise les données utilisateur qui arrivent via $ _POST puis je valide - le processus de validation de toutes les données inclut l'utilisation de mysqli_real_escape_string() sur la chaîne et trim(). La nature de certaines de mes entrées signifie cependant que je ne restreins aucun caractère à l'entrée de l'utilisateur. Est ce que je fais en toute sécurité et sinon comment pourrait-il être amélioré.Requête MYSQL sécurisée en utilisant l'entrée utilisateur

Un exemple d'une requête d'insertion (où $ nom et $ description sont $ _POST valeurs de données qui sont passées par une fonction de validation.)

$sql = "INSERT INTO company(company_name, company_description) VALUES('".$name."', '".$description."')"; 
$result = mysqli_query($con, $sql); 

Un exemple d'une requête de sélection (où CompanyID $ est l'utilisateur entrée, real_escaped et dépouillé)

$sql = "SELECT * FROM events WHERE event_company=".$companyid.""; 
$result = mysqli_query($con, $sql); 

Merci à l'avance.

+3

vos requêtes ne sont pas du tout en sécurité, vous devez utiliser des instructions AOP ou mysqli préparés – cmorrissey

+1

avoir une idée des conséquences des injections SQL ** [ici] (https: // xkcd.com/327/)**, et si vous ne voulez pas avoir à traiter avec lui, lisez ** [cette question/réponses assez complet sur le sujet.] (https://stackoverflow.com/questions/60174/ how-can-i-prevent-sql-injection-in-php) ** – YvesLeBorg

+1

'mysqli_real_escape_string' ne protégera pas du tout votre requête select. Vous pouvez l'essayer avec '$ company =" 1 ou event_company = 2 ";' .Si 1 et 2 sont dans votre DB, vous aurez les deux. – jh1711

Répondre

1

Voici vos requêtes mises à jour pour utiliser les instructions préparées mysqli.

$sql = "INSERT INTO `company` (`company_name`, `company_description`) VALUES(?, ?)"; 
$stmt = $con->prepare($sql); 
$stmt->bind_param('ss',$name,$description); // ss is for string string 
$stmt->execute(); 
$result = $stmt->get_result(); 

et

$sql = "SELECT * FROM `events` WHERE `event_company` = ?"; 
$stmt = $con->prepare($sql); 
$stmt->bind_param('i',$companyid); // i indicates integer 
$stmt->execute(); 
$result = $stmt->get_result();