PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [B] Webfirewall



-=Player=-
24.02.2009, 17:27
Hab eine kleine Webfirewall gecoded.
Ist nichts aufwendiges, soll nur das Prinzip darstellen, wie sowas funktionieren könnte.

Beschreibung:
GET und POST parameter werden auf Badwords überprüft.



<?php
# http://novusec.com
# by -=Player=-

$BadWords = array("<", ">", "'", "union", "select", "order", "http");

foreach($_GET as $var1){
$GloVars[] .= strtolower($var1);
}
foreach($_POST as $var1){
$GloVars[] .= strtolower($var1);
}
if(count($GloVars) > 0){
foreach($GloVars as $GloVar){
foreach($BadWords as $BadWord){
if(substr_count($GloVar, strtolower($BadWord)) > 0){
die('Hacking attempt!');
}
}
}
}
?>

Cheese
24.02.2009, 17:42
schönes script, gefällt mir, hab mir immer gedanken gemacht wie sowas funktioniert ;)

blackberry
24.02.2009, 17:48
Nette Idee und sicher sehr nützlich! :)
Gut wäre es allerdings noch $GloVars am Anfang als Array zu definieren.
Bei mir spuckt PHP gleich eine "Notice" aus;
Notice: Undefined variable: GloVars in /home/blackberry/Desktop/firewall.php on line 13
Natürlich ist das kein Fehler an sich, es ist aber sicher nicht so schön wenn man auf der Webseite Fehlermeldungen hat (es gibt ja immer wieder Leute mit error_reporting E_ALL ;) ).

Außerdem verstehe ich nicht ganz wieso du den "Append-String-Operator" bei neuen Array-Elementen benutzt - da war doch noch nie etwas drin o_O

$GloVars[] .= strtolower($var1);

Eine kleine Verkürzung des Codes wäre vielleicht noch durch array_merge möglich:

foreach(array_merge($_GET, $_POST) as $var1){


mfG. BlackBerry

-=Player=-
24.02.2009, 18:00
den append string operator hatte ich noch drin, weil ich davor noch was anderes drin hat und vergessen hatte den rauszunehmen

und der grund warum ich kein array_merge verwendet habe ist, weil viele anfänger noch nicht alle befehle kenne, deshalb habe ich es so simpel wie möglich gestalltet.

Aber wie oben schon erwähnt, soll es nur zum verständnis dienen.

GregorSamsa
24.02.2009, 18:14
Für was kleines nicht schlecht, aber nicht wirklich für nen guten, Produktiven Einsatz geeignet.

Z.B.: XSS-Lücken - die werden quasi garnicht gefiltert (http, < und > ja, aber gibt ja noch 1000 andere Möglichkeiten)

Auch das suchen nach SQL-Wörter halte ich für eher sinnlos, vllt. will ja jemand das wort SELECT irgendwo benutzten?

Da kannst du besser addshlashes() nehmen, und aus Zahlen mit intval() definitv richtige Zahlen machen.

greetz

K1ngC0bra
24.02.2009, 22:35
Hab eine kleine Webfirewall gecoded.
Ist nichts aufwendiges, soll nur das Prinzip darstellen, wie sowas funktionieren könnte.


Der Text, den du eingegeben hast, ist zu kurz. Bitte erweitere den Text auf die minimale Länge von 1 Zeichen.
Warum kommt eigentlich immer diese Meldung?

36c
25.02.2009, 09:48
Das geht wesentlich einfacher und schneller zu programmieren:


<?php

// Define bad Words
$BadWords = array("<", ">", "'", "union", "select", "order", "http");

// Glue our requeststring
$ReqStr .= implode('', $_GET);
$ReqStr .= implode('', $_POST);
$ReqStr .= implode('', $_REQUEST);

// Search for badwords
foreach($BadWords as $bw) {
if(stripos($ReqStr, $bw) !== false) die('Hacking attempt!');
}

?>

H4x0r007
25.02.2009, 09:53
Einzigstes Problem ist eben nur bei z.B. einem Forum. Es braucht nur einer union in den Text zu schreiben und schon hat man nen Hacking Attempt...
Warum nicht einfach mysql_real_escape_string? :D