login  Naam:   Wachtwoord: 
Registreer je!
 Forum

beveiligen??

Offline ottorocket - 14/08/2006 18:03
Avatar van ottorocketOnbekend Hoe kan ik mijn scripts beveiligen tegen injecties?
Dus als er iets wordt opgeslagen in de database van een input veld??
met addslashes()?
Zijn er nog meer mogenlijkheden?

9 antwoorden

Gesponsorde links
Offline Ch0coschijt - 14/08/2006 18:08 (laatste wijziging 14/08/2006 18:11)
Avatar van Ch0coschijt HTML interesse op phpfreakz stond d8 ik een tut erover

edit:
Link: http://www.phpfreakz.nl/artikelen.php?aid=106
Offline Gerard - 14/08/2006 18:09
Avatar van Gerard Ouwe rakker Hier zijn al meerdere threads over geweest en de beste oplossing is nogsteeds PHP.net: mysql_real_escape_string.
Offline ottorocket - 14/08/2006 18:16 (laatste wijziging 14/08/2006 18:17)
Avatar van ottorocket Onbekend dit is een stukje van mijn registratie die ik had
  1. <?php
  2. $wachtwoord = (sha1(md5($_POST['wachtwoord'])));
  3. $datum = time();
  4. $ip = getip();
  5. $land = $_POST['land'];
  6. mysql_query("INSERT INTO leden (naam, wachtwoord, email, datum, ip, land) VALUES ('".$_POST['naam']."', '".$wachtwoord."', '".$_POST['email']."', '".$datum."', '".$ip."', '".$land."')") or die(mysql_error());
  7. echo "<tr><td>U bent met succes geregistreerd.</td></tr>";
  8. echo "<tr><td><a href='home.php'>Ga verder</a></td></tr>";
  9. ?>


na beveiligen kwam ik dit uit

  1. <?php
  2. $naam = mysql_real_escape_string($_POST['naam']);
  3. $wachtwoord_input = mysql_real_escape_string($_POST['wachtwoord']);
  4. $wachtwoord = (sha1(md5($wachtwoord_input)));
  5. $email = mysql_real_escape_string($_POST['email']);
  6. $datum = time();
  7. $ip = getip();
  8. $land = $_POST['land'];
  9. mysql_query("INSERT INTO leden (naam, wachtwoord, email, datum, ip, land) VALUES ('".$naam."', '".$wachtwoord."', '".$email."', '".$datum."', '".$ip."', '".$land."')") or die(mysql_error());
  10. echo "<tr><td>U bent met succes geregistreerd.</td></tr>";
  11. echo "<tr><td><a href='home.php'>Ga verder</a></td></tr>";
  12. ?>


is dit onderste stukje script veiligen tegen injecties en andere hackers toestanden?
Offline Simon - 14/08/2006 18:34
Avatar van Simon PHP expert een wachtwoord moet je volgens mij niet beveiligen tegen mysql injection, want er wordt een hash gevormd waarin geen schadelijke zaken zitten 
bij land heb ik mijn twijfels, gebruik je een select?
Offline ottorocket - 14/08/2006 18:39
Avatar van ottorocket Onbekend ja, land is een selectie blokje

dat van wachtwoord wist ik niet, maar naam zou normaal ook niet kunnen omdat hij daarvoor al controleert of er enkel nummers en letters inzitten, maar voor de zekerheid
Offline jensen - 14/08/2006 22:06 (laatste wijziging 14/08/2006 22:08)
Avatar van jensen Nieuw lid
  1. <?php/**
  2.   * Prepare a variable for use in a query.
  3.   * @param mixed $value The value that needs to be prepared.
  4.   * @access public
  5.   * @return mixed
  6.   */
  7. public function prepareForQuery($value) {
  8. // Strip slashes
  9. $value = stripslashes($value);
  10. }
  11.  
  12. // Only add quotes if it's not a numeric string.
  13. if (!is_numeric($value)) {
  14. $value = "'".mysql_real_escape_string($value)."'";
  15. }
  16. return $value;
  17. }
  18.  
  19. /**
  20.   * Clean the input from a form so that hacks don't work.
  21.   * @param pointer $var The variable to clean.
  22.   * @return mixed cleaned (array of) variable(s).
  23.   */
  24. public function cleanFromInput($var) {
  25. $search = array(
  26. "'<script[^>]*?>.*?</script>'si",
  27. "'<frame[^>]*?>.*?</frame>'si",
  28. "'<object[^>]*?>.*?</object>'si",
  29. "'<meta[^>]*?>.*?</meta>'si",
  30. "'<applet[^>]*?>.*?</applet>'si",
  31. "'<link[^>]*?>.*?</link>'si",
  32. "'<iframe[^>]*?>.*?</iframe>'si",
  33. "'<style[^>]*?>.*?</style>'si"
  34. );
  35.  
  36. $replace = array('');
  37. $resarray = array();
  38. $tel = 0;
  39. foreach (func_get_args() as $var) {
  40. // Get var
  41. // if (empty($var)) {
  42. // continue;
  43. //}
  44. $ourvar = &$var;
  45. $tel++;
  46.  
  47. if (!isset($ourvar)) {
  48. $ourvar = NULL;
  49. array_push($resarray, $ourvar);
  50. continue;
  51. }
  52. if (empty($ourvar)) {
  53. array_push($resarray, $ourvar);
  54. continue;
  55. }
  56.  
  57. // Clean var
  58. if (is_array($ourvar)) {
  59. foreach ($var as $k=>$v) {
  60. $ourvar[$k] = stripslashes($v);
  61. }
  62. } else {
  63. $ourvar = stripslashes($ourvar);
  64. }
  65. }
  66. $ourvar = preg_replace($search, $replace, $ourvar);
  67. array_push($resarray, $ourvar);
  68.  
  69.  
  70. }
  71.  
  72. // Return vars
  73. if ($tel == 1) {
  74. return $resarray[0];
  75. } else {
  76. return $resarray;
  77. }
  78. }
  79. ?>

Om de input van een form te cleanen:
  1. $var = cleanFromInput($_POST['var'] [, $_POST['var2'], ...]);


Om iets te cleanen alvorens in de databank te stoppen:
  1. $var = prepareForQuery($var);
Het gebruik is vrij eenvoudig, en vrij secure.
Offline Maarten - 14/08/2006 22:13 (laatste wijziging 14/08/2006 22:14)
Avatar van Maarten Erelid Ooit van strip_tags gehoord? En die cleanforoutput is nutteloos, htmlentities() doet het allemaal.

Gewoon mysql_real_escape_string bij insert, en htmlentities bij uitlezen, en klaar.
Offline jensen - 16/08/2006 09:31
Avatar van jensen Nieuw lid Ik wil niet altijd alle HTML weg, soms vereist een inputveld wel HTML input, daarom clean ik alleen de voor mij gevaarlijke input.
Offline xSc - 16/08/2006 13:41
Avatar van xSc Onbekend Ik gebruik eigenlijk altijd addslashes, intval en floatval.

Wat houdt dit in? $ip = getip();
Je kunt toch $_SERVER['REMOTE_ADDR'] gebruiken?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.294s