2012-03-27 7 views

Antwort

0

Es gibt viele zur Auswahl, aber in aller Ehrlichkeit ist Ihr bestes Werkzeug Bildung. Zu wissen, wie man es selbst verhindert. Die Tools, die in die normale Framework-Klassenbibliothek eingebaut sind, sind bei richtiger Verwendung vollkommen ausreichend.

Die Verwendung von parametrisierten Abfragen und/oder gespeicherten Prozeduren für jeden Datenbankaufruf ist die beste Vorbeugung.

Allerdings verwenden wir die Microsoft.Practices.EnterpriseLibrary.Data Klassen, die mit der Microsoft Patterns and Practices-Bibliothek bereitgestellt werden. Die, die wir verwenden, sind ein wenig veraltet, aber immer noch gut gemacht. Sie bieten einen gewissen Injektionsschutz und vereinfachen den Datenzugriff. Aber sie sind nicht das einzige und nicht unbedingt das beste Werkzeug für den Job.

Weitere aktuelle Informationen zur aktuellen Patterns and Practices-Bibliothek finden Sie unter here.

+0

Das Problem, das Projekt alrady geschrieben, und alle ändern Dinge zu parametrisierten Abfragen sind echte Schmerzen, also dachte ich, vielleicht gibt es eine Bibliothek, die in der Basis-Seite sitzen wird und die Anfrage fildere .... – StringBuilder

+0

Nein. Es tut uns leid. Es gibt solche Tools für CSRF, die mir bekannt sind, aber nicht so etwas wie das, was Sie für SQL Injection beschreiben. Es tut uns leid. Angesichts der Häufigkeit und des potentiellen Schadens von SQL-Injection-Fehlern (abhängig von Ihrem RDBMS) könnte es sich lohnen, die Datenzugriffslogik neu zu schreiben. Alles, was da draußen ist, würde ein erneutes Schreiben aller Abfragen erfordern, die nicht vertrauenswürdige Eingaben verwenden. – David

0

Link to Anti-Injection SQL

<?PHP 
     FUNCTION anti_injection($user, $pass) { 
       // We'll first get rid of any special characters using a simple regex statement. 
       // After that, we'll get rid of any SQL command words using a string replacment. 
       $banlist = ARRAY (
         "insert", "select", "update", "delete", "distinct", "having", "truncate", "replace", 
         "handler", "like", " as ", "or ", "procedure", "limit", "order by", "group by", "asc", "desc" 
       ); 
       // --------------------------------------------- 
       IF (EREGI ("[a-zA-Z0-9]+", $user)) { 
         $user = TRIM (STR_REPLACE ($banlist, '', STRTOLOWER ($user))); 
       } ELSE { 
         $user = NULL; 
       } 
       // --------------------------------------------- 
       // Now to make sure the given password is an alphanumerical string 
       // devoid of any special characters. strtolower() is being used 
       // because unfortunately, str_ireplace() only works with PHP5. 
       IF (EREGI ("[a-zA-Z0-9]+", $pass)) { 
         $pass = TRIM (STR_REPLACE ($banlist, '', STRTOLOWER ($pass))); 
       } ELSE { 
         $pass = NULL; 
       } 
       // --------------------------------------------- 
       // Now to make an array so we can dump these variables into the SQL query. 
       // If either user or pass is NULL (because of inclusion of illegal characters), 
       // the whole script will stop dead in its tracks. 
       $array = ARRAY ('user' => $user, 'pass' => $pass); 
       // --------------------------------------------- 
       IF (IN_ARRAY (NULL, $array)) { 
         DIE ('Invalid use of login and/or password. Please use a normal method.'); 
       } ELSE { 
         RETURN $array; 
       } 
     } 


     [1]: http://psoug.org/snippet/PHP-Anti-SQL-Injection-Function_18.htm 


    [1]: http://psoug.org/snippet/PHP-Anti-SQL-Injection-Function_18.htm