[SIZE=2]Bitte Schliesen und als Wichtig makieren.[/SIZE]
[SIZE=2]Also, was ich euch zeigen will, ist wie man auf performance und auf sicherheit in seinen Scripts achtet.[/SIZE]
[SIZE=2]Sicherheit:[/SIZE]
[SIZE=2]Da ich oft sehe, das Websiten sicherheitslücken haben, wollte ich hier einfach mal alle Aufklären zum Thema Sichereit und Performce.[/SIZE]
[SIZE=2]Bsp: Jeder will auf seiner Homepage eine URL like: index.php?action=side[/SIZE]
[SIZE=2]Dieses wird von den meisten so benutzt:[/SIZE]
[php]
<?PHP $action = $_GET['action']; if (file_exists($action)) { include($action); } else { include('default.html'); } ?>[/php]
[SIZE=2]Jedoch kann man so, jede beliebe Datei aufrufen und sogar bösen Code einschleußen z.b bild.jpg Oder Injections[/SIZE]
[SIZE=2]Eine bessere und schnellere methode wäre hingegen ein einfaches switch.[/SIZE]
[php]
<?PHP $php = '.php'; $action = $_GET['action']; switch ($action) { case 'index' : include($action.$php); break; } ?>[/php]
[size=2][SIZE=2]Dieses hat den Vorteil das die url nur den wert index enthalten darf und somit nichts gefährdet wird. Man sollte auch darauf achten das man die datei endung als variable deklariert, da man sonst mit einer einfachen Textfunktion diese ändern könnte.[/SIZE]
[SIZE=2]Nun kommen wir zu den MySQL queries:[/SIZE]
[SIZE=2]Auch hier gilt es, dass man strengstens auf die Sicherheit achten sollte, um sich vor möglichen Angriffen zu schützen.[/SIZE]
[php]
<?PHP $sql = "INSERT INTO deinetabelle (deinfeld) VALUES ('".$_POST['deinfeld']."')"; $result = mysql_query($sql); ?>[/php]
[SIZE=2]damit könnte man einen bösen Code in die Datenbank einschleußen.[/SIZE]
[SIZE=2]Um das zu verhindern, sollte man den befehl addslashes(); benutzen, und/oder strip_tags();.[/SIZE]
[SIZE=2]Erklärung: addslashes(); fügt \ hinzu womit der ganze string escapet wird, sodass kein böser Code mehr eingeführt werden kann.[/SIZE]
[SIZE=2]strip_tags(); löscht kommplett, HTML, JavaScript, und PHP aus einem String. Ausnahmen kann man hier angeben in form von:[/SIZE]
[php]
strip_tags($_POST[‚lla‘],‚b,u,i‘);
[/php]
[SIZE=2]somit wären die html tags b u und i erlaubt.[/SIZE]
[SIZE=2]Also ein sicheres INERT in die Datenbank würde so aussehen:[/SIZE]
[php]
<?PHP $sql = "INSERT INTO deinetabelle (deinfeld) VALUES ('".addslashes($_POST['deinfeld'])."')"; $result = mysql_query($sql); ?>[/php]
[SIZE=2]oder[/SIZE]
[php]
<?PHP $sql = "INSERT INTO deinetabelle (deinfeld) VALUES ('".strip_tags($_POST['deinfeld'])."')"; $result = mysql_query($sql); ?>[/php]
[SIZE=2]Auch bei der Ausgabe sollte man auf Sicherheit achten, hierzu wäre der befehl: htmlspecialchars();[/SIZE]
[SIZE=2]geignet…[/SIZE]
[SIZE=2]Wenn z.b. die Ausgabe in einer Tabelle erfolgt, will man ja das die Ausgabe in der Tabelle ist…[/SIZE]
[SIZE=2]Was wäre nun wenn einer mit in die Datenbank einträgt? Nun wäre das Komplette Layout kaputt.[/SIZE]
[SIZE=2]Um das zu verhinden, kann man folgenden Code Benutzen:[/SIZE]
[php]
<?PHP $sql = "SELECT name FROM deinetabelle"; $result = mysql_query($sql); $fetch = mysql_fetch_assoc($result); echo htmlspecialchars($fetch['name']); ?>[/php]
[SIZE=2]Allgemeine Angriffe:[/SIZE]
[SIZE=2]Um einen Allgemeinen Angriff zusätzlich vermeiden zu können, könnte man die Url also das was oben in der Adressleiste steht, zusätzlich auf bösen code untersuchen, dazu hab ich mal einen code rausgesucht, der das möglich macht:[/SIZE]
[php]
<?PHP $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', '', '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', '', 'sql=');$checkworm = str_replace($wormprotector, ‚*‘, $cracktrack);
if ($cracktrack != $checkworm && $crackpost != $checkworm)
{
$cremotead = $_SERVER[‚REMOTE_ADDR‘];
$cuseragent = $_SERVER[‚HTTP_USER_AGENT‘];
die( „Attack detected!
Dieser Angriff wurde erkannt und blockiert - This attack was recognized and blocked:
Your Ip-Adress was automatically banned - Ihre Ip-Adresse wurde automatisch gebannt:
“.$cremotead." - ".$cuseragent);
}
?>
[/php]
[SIZE=2]einfach als tracker.php speichern, und in jede php datei ziemlich am Anfang includen.[/SIZE]
[SIZE=2]Ihr könnt ihn testen, indem ihr folgendes macht: deinedatei.php?side=sql=[/SIZE]
[SIZE=2]und schon wird die simulierte attacke erkannt.[/SIZE]
[SIZE=2]Passwörter:[/SIZE]
[SIZE=2]Nun, das ist wohl das wichtigste für alle Programmierer.[/SIZE]
[SIZE=2]Wie kann man ein Passwort verschlüsseln? Nun da gibt es möglich mehrere varianten:[/SIZE]
[SIZE=2]md5();[/SIZE]
[SIZE=2]sha1();[/SIZE]
[SIZE=2]crypt();[/SIZE]
[SIZE=2]crc32();[/SIZE]
[SIZE=2]Am meisten wird jedoch md5(); verwendet.[/SIZE]
[SIZE=2]wie könnte man nun ein passwort verschlüsseln, und gegen Hackangriffe sichern? Nun auch hier hat mehrer möglichkeit.[/SIZE]
[SIZE=2]Z.b. mit md5[/SIZE]
[php]
[/php]
[SIZE=2]bei allen andern einfach das md5 ersetzen.[/SIZE]
[SIZE=2]Nun wei´ß ich aber das man immer ein passwort der länge 5 mit bruteforce hacken kann, deshalb habe ich mir was einfaches aber geniales überlegt.[/SIZE]
[SIZE=2]man hängt an das passwort einen zusatz hin, das wenn es gecrackt wird, der hacker nur das falsche passwort bekommt.[/SIZE]
[SIZE=2]ein beispiel:[/SIZE]
[php]
<?PHP $anhang = 'f026s4xsd5da6d46'; echo md5('password'.$anhang); ?>[/php]
[SIZE=2]nun wie kann man das wieder prüfen? das ist auch ganz einfach:[/SIZE]
[php]
<?PHP $anhang = 'f026s4xsd5da6d46'; $pw = md5('password'.$anhang); if ($pw == md5('password'.$anhang)) { // richtig } else { // falsch } ?>[/php]
[SIZE=2]manche machen es dem Hacker noch schwerer indem sie einfach alle verschlüsselungen durchgehen, was ich eigentlich sehr effektiv ist, aber jedoch ein wenig umständlich im gegensatz der vorgehensweise mit dem vorigen script:[/SIZE]
[php]
<?PHP $anhang = 'f026s4xsd5da6d46'; $pw = md5(sha1(crypt('password'.$anhang))); if ($pw == md5(sha1(crypt('password'.$anhanf)))) { // richtig } else { // falsch } ?>[/php]
262 zeichen waren zuviel also nächster post dann
Bitte nicht antworten ist noch nicht fertig