Registrieren
x

Log in

Benutzername:

Passwort:
 

oder Registrieren

  Passwort vergessen?



Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
SQLi/XSS Injection Badlist Filter
13-07-2010, 08:56 PM
Beitrag #1
SQLi/XSS Injection Badlist Filter
Hier mal ein badwords Filter gegen XSS und SQLi.

Das Script wurde von Fred777 geschrieben. Wurde aber zum Teil noch ein bischen von mir drinn rumgewurschtelt. Sicherlich ist es auch kein größerer Aufwand das ganze in eine Report Tabelle zu schreiben.

Code:
<?php

// Maskierungen entfernen, falls magic_quotes aktiv
if (get_magic_quotes_gpc()){
    $_GET = array_map('stripslashes', $_GET);
    $_POST = array_map('stripslashes', $_POST);
    $_REQUEST = array_map('stripslashes', $_REQUEST);
    $_COOKIE = array_map('stripslashes', $_COOKIE);
}

// gesamte GET/POST/REQUEST Arrays escapen
// $_GET = array_map('mysql_real_escape_string', $_GET);
// $_POST = array_map('mysql_real_escape_string', $_POST);
// $_COOKIE = array_map('mysql_real_escape_string', $_COOKIE);
// $_REQUEST = array_map('mysql_real_escape_string', $_REQUEST);

// nur bei Aufruf der Funktion escapen
// function secureSQL($unsecure){
    // $secure = mysql_real_escape_string($unsecure);
    
    // return $secure;
// }



#########################################################
#   Intrusion Detection System
#    --------------------------
#
#   Description:
#   Include this file into your php files like
#
#   require_once(ids.php);
#
#  
#   It helps to detect and log some webattacks:
#   XSS,CSRF,JS Injection,RCE,SQL Injection
#   by using a badlist
#
#   You can add your own words to the forbidden array
#
#---------------------------------------------------
#   powered by fred777  [fred777.de]
########################################################


#~~~~~~~~~~~~~~~~~ Configuration ~~~~~~~~~~~~~~~~~~~~~#

$logging = 0;
$logfile = "attack.txt";
$forbidden = array("from","'","union","select","+","0x","(",")",">","<","/");
$message = "You have an error in your syntax";

#~~~~~~~~~~~~~~~~~~~~~~ Vars ~~~~~~~~~~~~~~~~~~~~~~~~#

$ip = $_SERVER['REMOTE_ADDR'];
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$useragent = $_SERVER['HTTP_USER_AGENT'];
$date = date("d.m.Y H:i:s");
$logtext = "Attack : ".$date." - ".$ip." - ".$host." - ".$useragent;

#~~~~~~~~~~~~~~~~~~~~Logging ~~~~~~~~~~~~~~~~~~~~~~~#

function logging($logfile,$text) {
    $fp = fopen($logfile,"a");
    $size = filesize($logfile);
    if($size >= 3000000) {
    ftruncate($fp,0); }
    fwrite($fp,$text);
    fclose($fp);}

#~~~~~~~~~~~~~~~~~~ Hard-core ~~~~~~~~~~~~~~~~~~~~~#

foreach ($_REQUEST as $var) {
    foreach($forbidden as $bad) {
        if(@preg_match('/'.$bad.'/i',$var,$value)) {
            
            echo $message;
            if ($logging != 0) {
                $text = "\n".$logtext." - ".$_SERVER['SCRIPT_NAME']." - ".$var."\n";
                logging($logfile,$text);
            }
            exit;
        }
    }
}



?>
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13-07-2010, 10:58 PM
Beitrag #2
Re: SQLi/XSS Injection Badlist Filter
Hallo Kobold,

um mal explizit auf GET_ einzugen.

Auf diese Art der Übergabe von Variablen muss ich leider des öfteren zurückgreifen. Dabei verwende ich stehts eine Datei die per Zufall bei jedem Aufruf an den Server eine Kombination aus Zahlen und Buchstaben ausgibt. Diese Kobination erhalten sowohl die Datei welche die Variablen senden sollte und jene die Variablen empfangen kann.

Nun werden die zu übergebenden Variablen immer mit dieser Kombination übergeben. Ist diese nicht vorhanden oder fehlerhaft wird die Datei die Variablen empfängt gelöscht und neu erstellt.

Bei wichtigen oder sensiblen Daten arbeite ich auch zum Teil mit Cronjob. Die Datei die Variablen empfängt bleibt unbekannt und wird nur dem Server selbst zugänglich gemacht. Die Datei die Variablen sendet übergibt diese an einen gewöhnliche Textdatei. Cronjob startet eine weitere die dann alle fünf Minuten unabhängig von Tätigkeiten von Besuchern die Textdatei ausliest und an die Datei übergibt welche die Variablen empfängt.

Zum Schluss bezieht die Datei welche die Variablen ausgibt die Daten aus jener Datei die sie empfangen hat und nur vom Server selbst zugänglich ist. Selbstverständlich gleicht diese Datei den Inhalt der Variablen auch noch mal ab mit den Inhalt der übergeben werden sollte.

Von Außen besteht zu keinem Zeitpunkt die Möglichkeit überhaupt irgendwelche Variablen oder Sonstiges zu übergeben. Natürlich ist das Verfahren umständlich und Daten werden nicht direkt verarbeitet.


Mit freundlichen Grüßen

sys Wink
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14-07-2010, 09:03 AM
Beitrag #3
Re: SQLi/XSS Injection Badlist Filter
Dir ist schon klar was der Unterschied zwischen POST und GET ist?
Stell dir mal vor du hast einen Blog, ich bin mir zwar nicht ganz sicher, aber ich glaube, du kannst so keinen BLogPost z.b. als Link erstellen oder? Daten die gesendet werden die eine Eingabe beinhalten, sollten immer per POST gesendet werden. Und wenn es User Spezifische Aktionen sind, wie z.b. das löschen eines Accounts, sollte ein Random wert, der kurzzeitig in der Datenbank abgelegt wird oder ein Session hash oder etwas ähnliches mit in den GET, so kann keiner jemandem einen Link schicken, und wenn man draufklickt, ist der Account gelöscht.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste

Kontakt   Anti-Hack - Gemeinsam gegen DDoS, Spam und Hacker   Nach oben   Zum Inhalt   Archiv-Modus   RSS-Synchronisation   Impressum