ce qui est erroné avec ce php mysql_real_escape_string
Atomic Number Latin English Abbreviation* check the variables for content */
/*** a list of filters ***/ $filters = array( 'searchtext' => array('filter' => FILTER_CALLBACK, 'options' => 'mysql_real_escape_string'), 'fieldname' => array('filter' => FILTER_CALLBACK, 'options' => 'mysql_real_escape_string') ); /*** escape all POST variables ***/ $input = filter_input_array(INPUT_POST, $filters); /*** check the values are not empty ***/ if(empty($input['fieldname']) || empty($input['searchtext'])) { echo 'Invalid search'; } else { /*** mysql hostname ***/ $hostname = 'localhost'; /*** mysql username ***/ $username = 'username'; /*** mysql password ***/ $password = 'password'; /*** mysql database name ***/ $dbname = 'periodic_table'; /*** connect to the database ***/ $link = @mysql_connect($hostname, $username, $password); /*** check if the link is a valid resource ***/ if(is_resource($link)) { /*** select the database we wish to use ***/ if(mysql_select_db($dbname, $link) === TRUE) { /*** sql to SELECT information***/ $sql = sprintf("SELECT * FROM elements WHERE %s = '%s'", $input['fieldname'], $input['searchtext']); /*** echo the sql query ***/ echo '<h3>'.$sql.'</h3>'; /*** run the query ***/ $result = mysql_query($sql); /*** check if the result is a valid resource ***/ if(is_resource($result)) { /*** check if we have more than zero rows ***/ if(mysql_num_rows($result) !== 0) { echo '<table>'; while($row=mysql_fetch_array($result)) { echo '<tr> <td>'.$row['atomicnumber'].'</td> <td>'.$row['latin'].'</td> <td>'.$row['english'].'</td> <td>'.$row['abbr'].'</td> </tr>'; } echo '</table>'; } else { /*** if zero results are found.. ***/ echo 'Zero results found'; } } else { /*** if the resource is not valid ***/ 'No valid resource found'; } } /*** if we are unable to select the database show an error ****/ else { echo 'Unable to select database '.$dbname; } /*** close the connection ***/ mysql_close($link); } else { /*** if we fail to connect ***/ echo 'Unable to connect'; } } }
autre { echo 'Choisissez S'il vous plaît un élément'; J'ai reçu ce code du site tutoriels de phppro.org et j'ai essayé de l'exécuter. Cela donne Attention: mysql_real_escape_string() [function.mysql-real-escape-string]: Un lien vers le serveur n'a pas pu être établi. .... Attention: mysql_real_escape_string() [function.mysql-real-chaîne-d'évasion]: Accès refusé pour l'utilisateur 'ODBC' @ 'localhost' (using mot de passe: NO) ....
Je suis allé à "Note: Une connexion MySQL est nécessaire avant d'utiliser mysql_real_escape_string() sinon une erreur de niveau E_WARNING est générée, et FALSE est renvoyé Si link_identifier n'est pas défini, la dernière connexion MySQL est utilisée."
Mes questions sont: 1-pourquoi mettre une citation simple autour de mysql_real_escape_string? 2-Ils devraient d'abord établir une connexion, puis utiliser l'instruction $ filter array avec mysql_real_escape_string?
injection SQL détectée –
@ Col.Shrapnel: Non, l'ensemble filter \ _input \ _ray() thingy est supposé invoquer real \ _escape \ _string sur chaque élément de \ _POST et stocker le résultat dans $ input. _If_ cela a fonctionné comme prévu il n'y aurait pas de vulnérabilité d'injection sql. – VolkerK
@VolkerK Alors quoi? real_escape_string n'est pas un sortilège qui vous rend "sûr". –