sql injection

  • kit
  • Born
  • Born
  • No Avatar
  • Inscription: Oct 18, 2008
  • Messages: 1
  • Loc: South Africa
  • Status: Offline

Message Octobre 18th, 2008, 12:19 pm

Hé,
Je suis nouveau à MySql et je me demandais comment prévenir les attaques SQL. Voulez mysql_real_escape_string aide? Si oui, où exactement dois-je l'insérer dans un script?

Désolé si cette question semble stupide, mais je suis vraiment nouveau à cela.
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Octobre 18th, 2008, 12:19 pm

  • PolishHurricane
  • Mastermind
  • Mastermind
  • Avatar de l’utilisateur
  • Inscription: Fév 17, 2005
  • Messages: 1585
  • Status: Offline

Message Octobre 18th, 2008, 12:48 pm

http://us.php.net/mysql_real_escape_string
et faites défiler jusqu'à «Exemple #3 A "Best Practice" query ", ce n'est pas vraiment une meilleure pratique de son mieux, mais assez bon.

Une astuce, pour assurer immédiatement la moitié de votre entrée, juste intval () tous les nombres entiers. Qui va régler la moitié de vos problèmes. Vous n'avez pas d'échapper à leur toute autre manière.

Ceci est probablement préférable de l'utiliser sur votre entrée à la place de l'encombrement de l'instruction conditionnelle avec "if (get_magic_quotes_gpc ())":

Code: [ Select ]
 
function SmartRemoveSlashes($value='')
{
//This function removes slashes placed there by PHP so you can do your own string escaping, and attempts to remove them off of arrays, It's pretty reliable though
return (get_magic_quotes_gpc()) ? (is_array($value) ? array_map("stripslashes", $value) : stripslashes($value)) : $value;
}
 
$name = SmartRemoveSlashes($_REQUEST['name']);
 
  1.  
  2. function SmartRemoveSlashes($value='')
  3. {
  4. //This function removes slashes placed there by PHP so you can do your own string escaping, and attempts to remove them off of arrays, It's pretty reliable though
  5. return (get_magic_quotes_gpc()) ? (is_array($value) ? array_map("stripslashes", $value) : stripslashes($value)) : $value;
  6. }
  7.  
  8. $name = SmartRemoveSlashes($_REQUEST['name']);
  9.  


Je crois qu'ils sont de supprimer totalement les guillemets magiques dans php6 though.
There's no place like 127.0.0.1, badass part is now it's ::1
  • moniqu
  • Novice
  • Novice
  • No Avatar
  • Inscription: Oct 23, 2008
  • Messages: 32
  • Status: Offline

Message Octobre 25th, 2008, 5:59 am

Heres un livre blanc sur les injections SQL
http://www.securiteam.com/securityrevie ... 1P76E.html

et quelques autres documents:

Les attaques par injection SQL et des conseils sur la façon de les prévenir
http://www.codeproject.com/KB/database/ ... tacks.aspx

Prévention des attaques par injection SQL
http://www.wwwcoder.com/main/pare notid/2 ... fault.aspx

Prévenir l'injection SQL par le durcissement du code
http://searchsqlserver.techtarget.com/t ... 66,00.html
  • Nightslyr
  • Proficient
  • Proficient
  • No Avatar
  • Inscription: Sep 21, 2005
  • Messages: 274
  • Status: Offline

Message Octobre 29th, 2008, 11:04 am

PolishHurricane a écrit:
http://us.php.net/mysql_real_escape_string
et faites défiler jusqu'à «Exemple #3 A "Best Practice" query ", ce n'est pas vraiment une meilleure pratique de son mieux, mais assez bon.

Une astuce, pour assurer immédiatement la moitié de votre entrée, juste intval () tous les nombres entiers. Qui va régler la moitié de vos problèmes. Vous n'avez pas d'échapper à leur toute autre manière.

Ceci est probablement préférable de l'utiliser sur votre entrée à la place de l'encombrement de l'instruction conditionnelle avec "if (get_magic_quotes_gpc ())":

Code: [ Select ]
 
function SmartRemoveSlashes($value='')
{
//This function removes slashes placed there by PHP so you can do your own string escaping, and attempts to remove them off of arrays, It's pretty reliable though
return (get_magic_quotes_gpc()) ? (is_array($value) ? array_map("stripslashes", $value) : stripslashes($value)) : $value;
}
 
$name = SmartRemoveSlashes($_REQUEST['name']);
 
  1.  
  2. function SmartRemoveSlashes($value='')
  3. {
  4. //This function removes slashes placed there by PHP so you can do your own string escaping, and attempts to remove them off of arrays, It's pretty reliable though
  5. return (get_magic_quotes_gpc()) ? (is_array($value) ? array_map("stripslashes", $value) : stripslashes($value)) : $value;
  6. }
  7.  
  8. $name = SmartRemoveSlashes($_REQUEST['name']);
  9.  


Je crois qu'ils sont de supprimer totalement les guillemets magiques dans php6 though.


Oui, les guillemets magiques sera supprimé dans PHP 6.

Je pense que l'utilisation de l'extension mysqli est effectivement plus avantageux que de compter sur mysql_real_escape_string et sprintf comme une meilleure pratique.

D'abord, vous pouvez utiliser mysqli dans une approche orientée objet façon hors de la boîte. Je ne peux pas vous dire combien de fois Ive a vu d'autres personnes encapsuler les fonctions standards de MySQL dans une classe wrapper juste pour leur donner une saveur POO.

Deuxièmement, elle s'appuie sur les instructions préparées pour la sécurité de type. Le meilleur exemple pratique vous avez accédé à cette simulation avec sprintf. Mysqli a cette fonctionnalité construit po

Enfin, il échappe automatiquement toutes les données entrantes. Youll n'ont jamais besoin d'utiliser mysql_real_escape_string nouveau.

J'ai écrit un petit script de test pour illustrer mysqli en action. Il insère des hyperliens est entrée dans une base de données, puis affiche ceux qui sont déjà entrés. Dans un exemple du monde réel, Id utilisez probablement des expressions régulières pour veiller à ce qu'un lien hypertexte légitime a été soumise.

Code: [ Select ]
 
<?php
   require_once("data/config.php5");
 
   $mysqli = new mysqli(HOST, USER, PASSWORD, MYDB);
 
   $form = <<<EOF
<html>
<head>
<title>DB test</title>
</head>
 
<body>
<form action="{$_SERVER['PHP_SELF']}" method="post">
Enter URL: <input type="text" name="url" /><br />
<input type="submit" name="submit" value="submit" />
</form>
 
</body>
</html>
 
EOF;
 
   if(isset($_POST['submit']))
   {
      $url = $_POST['url'];
 
      $query = "INSERT INTO urls (url) VALUE (?)";
 
      $stmt = $mysqli->prepare($query);
      $stmt->bind_param("s", $url);
      $stmt->execute();
      $stmt->close();
 
      $query = "SELECT url from urls";
 
      $stmt = $mysqli->prepare($query);
      $stmt->execute();
      $stmt->bind_result($link);
 
      $resultOutput = "URL's: <br />";
 
      while($stmt->fetch())
      {
         $resultOutput .= "$link <br />";
      }
 
      $stmt->close();
      $resultOutput .= "<br /><br />";
   }
 
   echo $form;
 
   if($resultOutput)
   {
      echo $resultOutput;
   }
 
   $mysqli->close();
?>
  1.  
  2. <?php
  3.    require_once("data/config.php5");
  4.  
  5.    $mysqli = new mysqli(HOST, USER, PASSWORD, MYDB);
  6.  
  7.    $form = <<<EOF
  8. <html>
  9. <head>
  10. <title>DB test</title>
  11. </head>
  12.  
  13. <body>
  14. <form action="{$_SERVER['PHP_SELF']}" method="post">
  15. Enter URL: <input type="text" name="url" /><br />
  16. <input type="submit" name="submit" value="submit" />
  17. </form>
  18.  
  19. </body>
  20. </html>
  21.  
  22. EOF;
  23.  
  24.    if(isset($_POST['submit']))
  25.    {
  26.       $url = $_POST['url'];
  27.  
  28.       $query = "INSERT INTO urls (url) VALUE (?)";
  29.  
  30.       $stmt = $mysqli->prepare($query);
  31.       $stmt->bind_param("s", $url);
  32.       $stmt->execute();
  33.       $stmt->close();
  34.  
  35.       $query = "SELECT url from urls";
  36.  
  37.       $stmt = $mysqli->prepare($query);
  38.       $stmt->execute();
  39.       $stmt->bind_result($link);
  40.  
  41.       $resultOutput = "URL's: <br />";
  42.  
  43.       while($stmt->fetch())
  44.       {
  45.          $resultOutput .= "$link <br />";
  46.       }
  47.  
  48.       $stmt->close();
  49.       $resultOutput .= "<br /><br />";
  50.    }
  51.  
  52.    echo $form;
  53.  
  54.    if($resultOutput)
  55.    {
  56.       echo $resultOutput;
  57.    }
  58.  
  59.    $mysqli->close();
  60. ?>
  • PolishHurricane
  • Mastermind
  • Mastermind
  • Avatar de l’utilisateur
  • Inscription: Fév 17, 2005
  • Messages: 1585
  • Status: Offline

Message Octobre 29th, 2008, 3:12 pm

http://us2.php.net/manual/en/mysqli.rea ... string.php
There's no place like 127.0.0.1, badass part is now it's ::1
  • Nightslyr
  • Proficient
  • Proficient
  • No Avatar
  • Inscription: Sep 21, 2005
  • Messages: 274
  • Status: Offline

Message Octobre 30th, 2008, 8:35 am

PolishHurricane a écrit:
http://us2.php.net/manual/en/mysqli.real-escape-string.php


Utilisation de déclarations préparées à l'avance avec mysqli échappe automatiquement les valeurs. Le real_escape_string fonction est là pour ceux qui ne veulent pas d'utiliser des déclarations préparées.

EDIT: Voir ce lien: http://dev.mysql.com/tech-resources/art ... ments.html

Le premier grand point de la Pourquoi utiliser préparées? cette section traite.
  • PolishHurricane
  • Mastermind
  • Mastermind
  • Avatar de l’utilisateur
  • Inscription: Fév 17, 2005
  • Messages: 1585
  • Status: Offline

Message Octobre 31st, 2008, 11:43 am

Nightslyr a écrit:
PolishHurricane a écrit:
http://us2.php.net/manual/en/mysqli.real-escape-string.php


Utilisation de déclarations préparées à l'avance avec mysqli échappe automatiquement les valeurs. Le real_escape_string fonction est là pour ceux qui ne veulent pas d'utiliser des déclarations préparées.

EDIT: Voir ce lien: http://dev.mysql.com/tech-resources/art ... ments.html

Le premier grand point de la Pourquoi utiliser préparées? cette section traite.


Je sais que cela, Im pas le seul à poser des questions...
There's no place like 127.0.0.1, badass part is now it's ::1
  • bastones
  • Novice
  • Novice
  • No Avatar
  • Inscription: Nov 02, 2008
  • Messages: 19
  • Status: Offline

Message Novembre 2nd, 2008, 6:54 am

Au lieu de gens qui vous donne des conseils que vous ne saisirez pas même dès le premier jour, vous utilisez simplement que la fonction englobante $ _POST [ "nom"] superglobale. Par exemple, si vous avez un champ de texte: <input type="text" name="name" /> youd procédez comme suit:

Code: [ Select ]
<?php
$message=mysql_real_escape_string($_POST['name']);
$query=mysql_query("SELECT.."); // etc
?>
  1. <?php
  2. $message=mysql_real_escape_string($_POST['name']);
  3. $query=mysql_query("SELECT.."); // etc
  4. ?>


...ce serait ajouter des barres obliques pour ces cours en tant que \ et \ "qui empêche les commentaires SQL (un peu comme pour / / PHP) de passer par la requête MySQL.

Afficher de l'information

  • Total des messages de ce sujet: 8 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC