Anti SQL Injection

10/30/2013 23:28 ˏ˖→»[ற4ЯCø]«←˖ˏ™#1
Hallo,

mal ein kleiner Anti SQL Injection code.

PHP Code:
$array = array("'""union""select""<script>""alert""order""../""/etc/passwd""c99""/etc/shadow""substr"); 

foreach (
$_REQUEST as $req

    foreach (
$array as $arr
    { 
        if (
preg_match("/".$arr."/i"$req) == true
        { 
            die(
"SQL Injection blocked!"); 
        } 
    } 

MfG
10/30/2013 23:47 dowhile#2
Schwachsinn.
10/30/2013 23:50 マルコ#3
OK. Nein. Das ist der schlechteste Schutz, den ich je gesehen hab^^
- unperformant
- blockiert nur die gegebenen Zeichenketten
- blockiert Zeichenketten, die die gegebenen Zeichenketten enthalten

Ich schlage einfaches escapen vor. oder noch besser die Verwendung von Prepared Statements (siehe z.B. PDO)
10/30/2013 23:54 Jay Niize#4
Kommt hier rein : [Only registered and activated users can see links. Click Here To Register...]

Zumal gibt es mehrere SQL-Injections als diese in deinem Array.

Benutze lieber das hier :

Quote:
Originally Posted by Che​ View Post
Code:
array_walk($_GET, create_function('&$value', 'return $value=htmlspecialchars(mysql_escape_string($value));'));
array_walk($_POST, create_function('&$value', 'return $value=htmlspecialchars(mysql_escape_string($value));'));
Nettes Snippet um PHP Scripte allgemein deutlich sicherer zu machen. Im Grunde genommen nimmt man so (sofern geschickt im Haupt-Script eingebaut) ganz bequem jeglichen Nutzern sämtliche Möglichkeiten XSS- oder SQLi-Attacken durchzuführen.

~Grüße
10/31/2013 00:28 XxharCs#5
Wenn wir schon dabei sind:

Ein PHP-Script nie absterben lassen^^(die() )
Wenn du abbrichst, dann mit exit oder return
10/31/2013 01:18 tolio#6
Quote:
Originally Posted by XxharCs View Post
Wenn wir schon dabei sind:

Ein PHP-Script nie absterben lassen^^(die() )
Wenn du abbrichst, dann mit exit oder return
Wenn wir grad dabei sind:

Quote:
There's no difference - they are the same.

Quote:
PHP Manual for exit:

Note: This language construct is equivalent to die().
Quote:
PHP Manual for die:

This language construct is equivalent to exit().
[Only registered and activated users can see links. Click Here To Register...]
10/31/2013 11:46 XxharCs#7
Quote:
Originally Posted by tolio View Post
Wenn wir grad dabei sind:
Quote:
There's no difference - they are the same.


Quote:
PHP Manual for exit:

Note: This language construct is equivalent to die().
Quote:
PHP Manual for die:

This language construct is equivalent to exit().
[Only registered and activated users can see links. Click Here To Register...]
Jeder Professionelle PHP-Programmierer wird dir von die() abraten.
Bei einem die() ist das Exception, Warning, Error Handling einfach nur grauslich. (Außer man verwendet ein @ vor der ganzen Funktion, was widderum grauslich ist)

Mit einem die() kannst du nicht alle Errors loggen, auffagen usw. und sowas ist eine schöne Information für einen Angreifer wenn er das meiste mitlesen kann.
Quote:
Originally Posted by Aus mehreren PHP Programmierer - Blogs&Forums
  • It's not a very nice way to present the user with an error message.
  • Using for instance the mysql_error() call with it, as many people do, exposes information that should never get output in a production environment (see: PHP Security)
  • You cannot catch the error in any way.
  • You cannot log the error.
  • You cannot control whether it should be output to the screen or not. It's okay to do that in a development environment, but certainly not in a production environment.
  • It prevents you from doing any sort of cleanup. It just ends the script abruptly.

Bei einem exit() kannst du Errors loggen, mit einem Errorcode das script beenden und du gibst nicht so leicht Info an einen Angreifer.

Außerdem steht in meinem Post noch return.
In der Produktion sollte man return und exit bevorzugen als ein Script mit allem drum und dran absterben zu lassen(die)


Aber dies kann zu einer endlosen Diskussion eskalieren, da jeder hier eine andere Meinung haben wird.
Deswegen der Post von:
Quote:
Originally Posted by .Zeraki' View Post
Kommt hier rein : [Only registered and activated users can see links. Click Here To Register...]

Zumal gibt es mehrere SQL-Injections als diese in deinem Array.

Benutze lieber das hier :

Zitat:
Zitat von Che​ [Only registered and activated users can see links. Click Here To Register...]
Code:
Quote:
array_walk($_GET, create_function('&$value', 'return $value=htmlspecialchars(mysql_escape_string($value ));')); array_walk($_POST, create_function('&$value', 'return $value=htmlspecialchars(mysql_escape_string($value ));'));
Nettes Snippet um PHP Scripte allgemein deutlich sicherer zu machen. Im Grunde genommen nimmt man so (sofern geschickt im Haupt-Script eingebaut) ganz bequem jeglichen Nutzern sämtliche Möglichkeiten XSS- oder SQLi-Attacken durchzuführen.



~Grüße
10/31/2013 14:14 MrSm!th#8
Was ist daran nicht zu verstehen, dass exit und die Synonyme sind?


Btw. Das Snippet von Che ist auch nicht viel besser.

#closed