ich dachte mir, mal ein Tutorial über Sicherheit in PHP-Skripten zu machen.
Na dann fang ich wohl an^^
Vorraussetzung ist PHP & MySQL zu können.
SQL-Injections sind der Albtraum eines jeden Webmasters.
Doch was ist eine SQL-Injection?
Wie der Name schon sagt wird SQL-Code in deinen SQL-Code eingeschleust.
Um das zu demonstrieren hier ein PHP-Script. NICHT BENUTZEN! BEINHALTET SICHERHEITSLÜCKE
PHP Code:
<?php
//Wir nehmen an per POST wurde ein Kennwort an dieses Skript gesendet,
//es befindet sich im Element mit dem Key 'unsicher'
$unsicher = $_POST['unsicher'];
//Das Kennwor überprüfen wir nun in der DB und schauen ob es vorhanden ist.
$q = mysql_query("SELECT * FROM `users` WHERE `kennwort` = '".$unsicher."'");
//Nun behandeln wir den user entsprechend.
if (mysql_num_rows($q) != 0) {
echo 'Eingeloggt!';
} else {
echo 'Nix da!';
}
?>
Doch: Jetzt kommt User XYZ, und probiert aus Langeweile das aus: er gibt
Code:
' OR 1=1 --
Was ist aus unserer Query geworden?
Richtig,
Code:
SELECT * FROM `users` WHERE `kennwort` = '' OR 1=1 --'
Code:
SELECT * FROM `users` WHERE `kennwort` = '' OR 1=1
Wirklich alle.
Und somit ist
Code:
mysql_num_rows($q) != 0
Um dem vorzubeugen sollten wir die Usereingaben entsprechend escapen, also sichern.
Dies geht mit
PHP Code:
$string = mysql_real_escape_string($input);
PHP Code:
$int = intval($input);
Das ganze kann man dann in eine Funktion bauen, wie hier:
PHP Code:
<?php
function escapeMe($data, $isInt = false)
{
if ($isInt)
return intval($data);
return mysql_real_escape_string($data);
}
?>
PHP Code:
$int = escapeMe($input, true);
PHP Code:
$int = escapeMe($input);
Und somit seid ihr bei korrekter Verwendung die SQL-Injection los.
Part2 (Ausgabesicherheit in Nachrichtenstrukturen) folgt!
NullPointerException






