| Webmaster-Security Fragen zur richtigen Serverkonfiguration oder Absicherung dynamischer Scripte gehören hier hinein. |
Diskussion: Datenbank-Einträge vor dem einfügen "codieren" im Forum Webmaster-Security, in der Kategorie Security Area; Anzeige Ich hab hier 'mal ein kleines Script gebastelt, das Einträge "codiert" in die Datenbank schreibt: Code: function real_encode_string($string) { ...
![]() |
| | #1 (permalink) |
| Registriert seit: 08.05.10 ![]() Likes: 0 | Anzeige Ich hab hier 'mal ein kleines Script gebastelt, das Einträge "codiert" in die Datenbank schreibt: Code: function real_encode_string($string) {
$firststring = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$secondstring = array("<:a:>", "<:e:>", "<:i:>", "<:o:>", "<:u:>", "<:A:>", "<:E:>", "<:I:>", "<:O:>", "<:U:>");
$string = str_replace($firststring, $secondstring, $string);
return $string;
}
function real_decode_string($string) {
$firststring = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$secondstring = array("<:a:>", "<:e:>", "<:i:>", "<:o:>", "<:u:>", "<:A:>", "<:E:>", "<:I:>", "<:O:>", "<:U:>");
$string = str_replace($secondstring, $firststring, $string);
return $string;
} Ist dieses Script sicher genug? Dass es mysql_query's in mysql_q<:u:><:e:>ry's umwandelt, müsste klar sein ![]() Der Server müsste dann die Befehle nicht mehr erkennen, stimmt das? L.G. PCFreund PS: Ja ihr dürft den Script verwenden, war ja nich so schwer |
| | |
| | #2 (permalink) |
| Member of Honour ![]() | Gegenfrage: was genau erwartest du dir von dem Script? Dass es SQL-Injections unterbindet? In SQL-Injections wirst du kein "mysql_query" finden, sondern Code, welcher den reinen SQL-Code (also das was IN mysql_query(....) steht) manipuliert. Dieses Script von dir ist in meinen Augen nur unnötiges Aufblähen und bringt keinen großen Gewinn. Viel wichtiger ist, dass du sämtliche User-Eingaben mittels mysql_real_escape_string() escapest und z.B. dort, wo Zahlen erwartet werden, explizit in int castest, dort wo Fließkommazahlen erwartet werden explizit in float castest und da, wo ein ganz bestimmtes Format erwartet wird (E-Mail-Adressen, URLs), mit regulären Ausdrücken prüfst, ob die Eingaben korrekt sind. |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Registriert seit: 30.01.10 ![]() ![]() Likes: 1 | Ich sehe das genauso. Das Script wird dir nichts bringen. Beherzige beavisbee's Sicherheitstipps und verwende zusätzlich noch Whitelists. Wenn du also irgendwo eine bestimmte ID erwartest, prüfe anhand einer Whitelist ob es die ID auch gibt, usw.
__________________ Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. - Rick Cook - |
| | |
| | #4 (permalink) |
| Member of Honour ![]() | mich würd mal der ansatz hinter deinen sript da interessieren? gehst du davon aus, das alle schädlichen befehle mit vokalen daherkommen und du die so rauskickst?
__________________ » Flattr mich! - Wenn dir mein Beitrag geholfen hat! « <| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |> |
| | |
| | #5 (permalink) | |
| Themenstarter Registriert seit: 08.05.10 ![]() Likes: 0 | Zitat:
2. "INSERT INTO `test` SET `bla` = 'xD'" wird zu "<:I:>NS<:E:>RT <:I:>NT<:O:> `t<:e:>st` S<:E:>T `bl<:a:>` = 'xD'" gibts von außen trotzdem noch irgendwie eine möglichkeit, mich hacken zu können ?! und achja: mysql_real_escape_string() wird davor ausgeführt | |
| | |
| | #6 (permalink) |
| Member of Honour ![]() | wenn du mysql_real_escape_strings() schon drin hast, wozu dann das noch? und ja, es gibt IMMER möglichkeiten irgendwo was zu hacken. auch profis bauen hier und da sicherheitslücken rein, einfach weil irgendwas zu komplex wurde. sicher is netzwerkkabel ziehen
__________________ » Flattr mich! - Wenn dir mein Beitrag geholfen hat! « <| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |> |
| | |
| | #7 (permalink) |
| Würde eher auf mysql_real_escape_string setzen. Oder meiner Meinung nach noch besser ist PDO [1]. Bei solchen selbstgebastelten Sachen hat man dann immer das Problem mit normalen Usereingaben :/ MfG Inliferty [1] http://php.net/manual/de/book.pdo.php | |
| | |
| | #8 (permalink) | |
| Registriert seit: 30.01.10 ![]() ![]() Likes: 1 | Zitat:
Es gibt auch SQL-Injections, die ohne Vokale auskommen. Das allseits Bekannte Code: ' or 1=1/* Zudem könnte man das ein oder andere auch Hexadezimal schreiben. Daher ist deine Idee im Prinzip überflüssig. Um SQL-Injections effektiv zu verhindern, musst du woanders ansetzen, z.B. wie es mysql_real_escape_string() tut. Allerdings ist das allein auch nicht 100%-ig sicher.
__________________ Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. - Rick Cook - | |
| | |
| | #9 (permalink) |
| Moderator ![]() Registriert seit: 20.07.05 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 202 | Was spricht eigentlich gegen Prepared_Statement oder PHP prepared-statements als Anti-SQL-Injection? Oder wäre das zu einfach
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf! Selig, wer nichts zu sagen hat und trotzdem schweigt. |
| | |
| | #10 (permalink) |
| Member of Honour ![]() | und was auch ganz nützlich ist: Dinge, gegen die man ein System absichern will, selbst probieren... Also selbst mit dem Thema SQL-Injections beschäftigen, um zu verstehen, was da im Hintergrund passiert. Nur so kann man abschätzen, welche Maßnahmen sinnvoll sind und welche ehr weniger... |
| | |
| | #11 (permalink) | ||
| Zitat:
Danke CDW ![]() Zitat:
![]() Wenn du deinen Server wirklich sichern willst würde ich zuerstmal den Server richtig konfigurieren. * mysql Port nur auf localhost binden * Sonst nur die nötigen Ports nach außen forwarden (80, 25, 110, ...) * SSH/phpMyAdmin nur mit Ip aus dem LAN -> Für den Zugriff von außen einen VPN-Server aufsetzen * Apache Konfiguration (Logs, Information Disclosure, ...) * Linux System -> chroot * User-Rechte mit denen der Web-Service läuft ... MfG Inliferty | |||
| | |
| | #12 (permalink) |
| Registriert seit: 30.01.10 ![]() ![]() Likes: 1 | Da hast du natürlich Recht. Schande über mein Haupt, dass mir das net selber aufgefallen ist.
__________________ Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. - Rick Cook - |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |