URL: https://www.overclockers.at/coding-stuff/sicherheitsfragen_php_und_mysql_116785/page_1 - zur Vollversion wechseln!
ich hätt 2 sicherheitsfragen:
1. Sql injections
welche Voraussetzungen müssn für eine sql injection erfüllt sein? würd es z.b. reichen wenn ich "SELECT * FROM bla WHERE id='".$GET["..."]."'"; stehen hätte?
wie verhindert ich das?
im phpbb2 forum werden imho slashes hinzugefügt:
Code: PHPif( !get_magic_quotes_gpc() ) { if( is_array($HTTP_GET_VARS) ) { while( list($k, $v) = each($HTTP_GET_VARS) ) { if( is_array($HTTP_GET_VARS[$k]) ) { while( list($k2, $v2) = each($HTTP_GET_VARS[$k]) ) { $HTTP_GET_VARS[$k][$k2] = addslashes($v2); } @reset($HTTP_GET_VARS[$k]); } else { $HTTP_GET_VARS[$k] = addslashes($v); } } @reset($HTTP_GET_VARS); }
jep, so gehts, so mach ich meistens auch die sql-abfragen.
einziges prob: wenn du ein usersystem hast, und einer hat einen nickname wie " bl'a " oder " wap'p'la " o.ä dann spießt sich das und es kommt zu einer fehlermeldung.
Ad 2.
Wenn die Datenbank gehacked wurde, musst du eben das Passwort (und alles, womit man sonst noch Zugang bekommen kann) ändern. Daran führt kein Weg vorbei.
Eine Möglichkeit, um das Generieren eines Login-Cookies schwieriger zu machen, wäre, es mit einem geheimen Schlüssel, der im Sourcecode drinnensteht, zu verschlüsseln. Dann muss ein Angreifer auch auf den Sourcecode Zugriff erlangen, bevor er sich unbemerkt einschleichen kann.
@tomstig: Sollte nicht passieren, dazu escaped man es ja schließlich.
k thx... jo klar musst du alle passwörter ändern. nur wenn man z.b. eine community hat mit 1000 leute wirds halt problematisch.Zitat von RingdingAd 2.
Wenn die Datenbank gehacked wurde, musst du eben das Passwort (und alles, womit man sonst noch Zugang bekommen kann) ändern. Daran führt kein Weg vorbei.
Eine Möglichkeit, um das Generieren eines Login-Cookies schwieriger zu machen, wäre, es mit einem geheimen Schlüssel, der im Sourcecode drinnensteht, zu verschlüsseln. Dann muss ein Angreifer auch auf den Sourcecode Zugriff erlangen, bevor er sich unbemerkt einschleichen kann.
@tomstig: Sollte nicht passieren, dazu escaped man es ja schließlich.
wieso wird eigentlich durch das slashes hinzufügen eine sql injection ausgeschlossen?
Backslashes müssen es sein, vor jedem einfachen Anführungszeichen.
Die Backslashes sind deshalb nötig, um zu verhindern, dass jemand beliebige SQL-Statements ausführen kann. Beispiel: Du hast eine Maske, über die man den Benutzernamen usw. ändern kann. Die geänderten Daten fügst du einfach in die DB ein, ohne vorher Backslashes reinzumachen.Zitat von semteXwieso wird eigentlich durch das slashes hinzufügen eine sql injection ausgeschlossen?
Wieso?
Gerade mit SQL Injection ist es doch sehr leicht, sich Zugang zur Datenbank zu verschaffen.
Zitat von gueDie Backslashes sind deshalb nötig, um zu verhindern, dass jemand beliebige SQL-Statements ausführen kann. Beispiel: Du hast eine Maske, über die man den Benutzernamen usw. ändern kann. Die geänderten Daten fügst du einfach in die DB ein, ohne vorher Backslashes reinzumachen.
Bsp.:
UPDATE users SET name='$_GET["name"]', ... WHERE id=$login["id"]
Wenn ein Benutzer aber für seinen Namen z.B. folgenden wählt:
', password=JA5sdf352 WHERE id=1;
so kann er damit das Passwort von beliebigen Usern auf ein von ihm gewähltes umändern.
Btw. würde ich mir keine Gedanken darüber machen, dass jemand deine Datenbank hackt. Das sollte im Normalfall - wenn das DBMS richtig konfiguriert ist - nicht möglich sein. Viel gefährlicher ist es z.B., dass jemand das Passwort vom Admin snifft.
lustig auch beim login (und fast noch brenzliger imho)
du hast 'select * from benutzer where name="'.$user.'"'
dann gibt jemand statt "bla" "bla' OR 1=1;--" ein --> immer true, brauchst nix passwort ändern -> keiner merkts...
edit: und mit backslash davor gehts dann ned, weil er ja dann den string nicht mehr schliessen kann -> dazu slash...
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026