Perishand
24.04.2010, 19:05
Einen schönen Abend.
Ich habe mir eben gedanken darüber gemacht, wie man Seiten sicherer machen kann.
Meine Idee ist es, alle möglichen Fehler oder halt injections zu erkenne und zu unterbinden.
Meine erste Idee war folgende:
Da man für eine XSS und für eine sqlinjection spezielle Zeichen braucht, wie beispielsweise <> / "" * - usw. habe ich mir gedacht, ich überprüfe alle GET und POST Variablen auf die Richtigkeit. Klar, manchmal will man auch solche Zeichen in diesen Parametern benutzen, jedoch nur selten.
So habe ich mir folgende Funktion ausgedacht, die bei jedem Start einer Seite durchlaufen wird:
<?php
function checkSafety()
{
foreach($_GET as $getParam)
if(!checkForSpecialChars($getParam))
Header("Location: index.php");
foreach($_POST as $postParam)
if(!checkForSpecialChars($postParam))
Header("Location: index.php");
}
function checkForSpecialChars($wordToCheck)
{
$whiteChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX YZ1234567890";
$len = strlen($wordToCheck);
for($i=0;$i<$len;$i++)
{
$isWhite = false;
for($j=0;$j<62;$j++)
{
if($wordToCheck[$i]==$whiteChar[$j])
{
$isWhite = true;
break;
}
}
if(!$isWhite)
return false;
}
}
?>
Falls es so richtig ist und es auch sicher ist, würde ich mich über Feedback freuen.
Falls noch jemand Ideen hätte, bitte mir mitteilen, ich würde gerne ein paar Funktionen zusammen suchen, um möglichst viele Fehler zu vermeiden!
MfG
Naja escape_String() und htmlentities() tun es auch (man muss sie eben immer einfügen), wobei du nur GET und POST checkst, nimm lieber gleich alle REQUEST's.
Ich habe auch mal was dazu geschrieben: (allerdings noch nicht ganz fertig, gibt noch das ein oder andere..)
<?php
################################################## #######
# Intrusion Detection System
# --------------------------
#
# Description:
# Include this file into your php files like
#
# require_once(ids.php);
#
#
# It helps to detect and logs 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 = 1;
$logfile = "attack.txt";
$forbidden = array("from","'","union","select","+","0x","(",")",">","<","/");
$message = "You have an error in your sql 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;
}
}
}
?>
Der Nachteil bei dir ist, dass die Whitechars sich auch ändern können, Sonderzeichen for Example..
echoslider
26.05.2010, 21:12
PHP Sicherheitssoftware CTXtra (http://www.ctxtra.org/)
die hatten mal nen source zum einbau in jede seite als standalone. das macht genau das was du willst. nur bissl einfacher.. die daten kann man dann dirkt in ne htaccess schreiben so das der jenige direkt geblockt wird.
/edit:
<?php
// Cracker Tracker Protection System
// Created by: Christian Knerr - www.cback.de
// phpBB Users: Please use our complete phpBB2 Mod!
// Version: 2.0.0
//
// License: GPL
//
//
// Begin CrackerTracker StandAlone
//
$cracktrack = $_SERVER['QUERY_STRING'];
$wormprotector = array('chr(', 'chr=', 'chr%20', '%20chr', 'wget%20', '%20wget', 'wget(',
'cmd=', '%20cmd', 'cmd%20', 'rush=', '%20rush', 'rush%20',
'union%20', '%20union', 'union(', 'union=', 'echr(', '%20echr', 'echr%20', 'echr=',
'esystem(', 'esystem%20', 'cp%20', '%20cp', 'cp(', 'mdir%20', '%20mdir', 'mdir(',
'mcd%20', 'mrd%20', 'rm%20', '%20mcd', '%20mrd', '%20rm',
'mcd(', 'mrd(', 'rm(', 'mcd=', 'mrd=', 'mv%20', 'rmdir%20', 'mv(', 'rmdir(',
'chmod(', 'chmod%20', '%20chmod', 'chmod(', 'chmod=', 'chown%20', 'chgrp%20', 'chown(', 'chgrp(',
'locate%20', 'grep%20', 'locate(', 'grep(', 'diff%20', 'kill%20', 'kill(', 'killall',
'passwd%20', '%20passwd', 'passwd(', 'telnet%20', 'vi(', 'vi%20',
'insert%20into', 'select%20', 'nigga(', '%20nigga', 'nigga%20', 'fopen', 'fwrite', '%20like', 'like%20',
'$_request', '$_get', '$request', '$get', '.system', 'HTTP_PHP', '&aim', '%20getenv', 'getenv%20',
'new_password', '&icq','/etc/password','/etc/shadow', '/etc/groups', '/etc/gshadow',
'HTTP_USER_AGENT', 'HTTP_HOST', '/bin/ps', 'wget%20', 'uname\x20-a', '/usr/bin/id',
'/bin/echo', '/bin/kill', '/bin/', '/chgrp', '/chown', '/usr/bin', 'g\+\+', 'bin/python',
'bin/tclsh', 'bin/nasm', 'perl%20', 'traceroute%20', 'ping%20', '.pl', '/usr/X11R6/bin/xterm', 'lsof%20',
'/bin/mail', '.conf', 'motd%20', 'HTTP/1.', '.inc.php', 'config.php', 'cgi-', '.eml',
'file\://', 'window.open', '<SCRIPT>', 'javascript\://','img src', 'img%20src','.jsp','ftp.exe',
'xp_enumdsn', 'xp_availablemedia', 'xp_filelist', 'xp_cmdshell', 'nc.exe', '.htpasswd',
'servlet', '/etc/passwd', 'wwwacl', '~root', '~ftp', '.js', '.jsp', 'admin_', '.history',
'bash_history', '.bash_history', '~nobody', 'server-info', 'server-status', 'reboot%20', 'halt%20',
'powerdown%20', '/home/ftp', '/home/www', 'secure_site, ok', 'chunked', 'org.apache', '/servlet/con',
'<script', '/robot.txt' ,'/perl' ,'mod_gzip_status', 'db_mysql.inc', '.inc', 'select%20from',
'select from', 'drop%20', '.system', 'getenv', 'http_', '_php', 'php_', 'phpinfo()', '<?php', '?>', 'sql=');
$checkworm = str_replace($wormprotector, '*', $cracktrack);
if ($cracktrack != $checkworm)
{
$cremotead = $_SERVER['REMOTE_ADDR'];
$cuseragent = $_SERVER['HTTP_USER_AGENT'];
die( "Attack detected! <br /><br /><b>Dieser Angriff wurde erkannt und blockiert:</b><br />$cremotead - $cuseragent" );
}
//
// End CrackerTracker StandAlone
//
?>
Powered by vBulletin® Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.