Sql-Injection verhindern + (X)HTML, CSS in PHP

godsend101

New member
Hi,

Sry für den langen Titel...

da ich mich mich grade mit Sql beschäftige, wollte ich fragen wie man sich vor Sql Injections schützen kann. Reicht mysql_real_escape_string(); aus oder muss ich noch über irgendwelche anderen Funktionen und ihre Anwendungsweise bescheid wissen?
Und wie stehts mit Schutz vor (X)HTML, CSS, JS und Co.?

Ich weiß viele Fragen auf einmal aber danke schonmal im voraus...
 
Um (X)HTML, CSS und JS musst du dich als Webmaster eigentlich nicht kümmern, weil das alles im Browser ausgeführt wird - also wenn dann nur ein Sicherheitsproblem für den Anwender.

SQL-Injections kannst du mit mysql_real_escape_string() schon ganz gut vermeiden. Zusätzlich wärs noch möglich, die Eingabe auf ihren Typ zu überprüfen. Wenn du beispielsweise nur einen Integer-Wert erwartest aber mehr Text ankommt, weißt du, dass da was faul ist.
 
Naja soweit ich weiß kannst du bei XHTML, CSS, JS nichts machen, was den Server gefärdet weil das ja alles Clientbasiert abläuft-

Wenn du PHP und SQL benutzt kann man angegriffen werden 😉

Naja am besten kann man sich davor schützen, indem man PHP richtig lernt, es gibt auch Sicherheitsfirmen, die den Code von einem Überprüfen, würde ich aber nicht machen da zu Kostspielig. Und wer weiß ob die wirklich alle Lücker verraten 😀

Aber ehrlich gesagt weiß ich nichtmal ob man sich da überhaupt absichern kann, wenn deine Apache/PHP Config nicht richtig Eingestellt ist, gibts auch dort genug Möglichkeiten...

Wenn man mal so guckt Websites wie Microsoft.com werden ab und zu mal gehackt - und die geben Sicherlich sehr sehr hohe Beträge für die Website aus - also wie gesagt einen 100% Schitz ist wohl nie möglich 😉

Aber um dir Konkret zu helfen: Kann dir leider nichts genaueres dazu Sagen, leider zu wenig Erfahrung aber könnte mir vorstellen das es noch mehr als nur SQL Injections gibt
 
Pixelflat kannst du mal nen Beispiel machen. Kapier das nich so bei dem Manual...

PHP:
<?php
$autor = $_POST[autor];
$titel = $_POST[titel];
$untertitel = $_POST[untertitel];
$text = $_POST[text];
$datum = $_POST[datum];

mysql_connect("*****",
  "******","******") or die
  ("Keine Verbindung moeglich");
  mysql_select_db("*******") or die
  ("Die Datenbank existiert nicht");
 
#so?

mysql_real_escape_string($autor);
mysql_real_escape_string($titel);
mysql_real_escape_string($untertitel);
mysql_real_escape_string($text);
mysql_real_escape_string($datum);

$abfrage = "INSERT INTO ***** (Autor, Titel, Untertitel, Text, Datum) VALUES ('$autor', '$titel', '$untertitel', '$text', '$datum')";
$senden = mysql_query($abfrage);
?>
 
sieht ja ganz gut aus. nur das Problem ist das du zwar die Funktion angewendet hast, sie aber total nutzlos ist, da du die Variablen nicht überschreiben lässt.
So wärs richtig:

PHP:
$autor = mysql_real_escape_string($autor);
$titel = mysql_real_escape_string($titel);
$untertitel = mysql_real_escape_string($untertitel);
$text = mysql_real_escape_string($text);
$datum = mysql_real_escape_string($datum);
 
k glaub mein PHP Wissen ist etwas lückenhaft. Danke

Nun noch mal zu (X)HTML, CSS, JS und Co. Gut schaden auf dem Server kann ich nicht anrichten, aber mit (X)HTML und CSS könnte ich das Layout doch durcheinander bringen.

Zu JS:

In das Formular schreib ich jetzt mal in das Feld Autor:

HTML:
<script type="Text/Javascript">
alert("PWND!!!!!!!!!111");
</script>
Das hinterlässt wie gesagt keine Schäden, aber jeder kann das Layout gestalten wie er will😱
 
Hm nein, dazu müsste er den Quelltext ja bearbeiten. Und um das zu tun, müsste er die Seite bei sich lokal abspeichern. Und da ist natürlich klar, dass jeder alles an der Seite dann verändern kann.

X(HTML) ist nur für den Inhalt verantwortlich. Wenn du CSS verwendest, sollten keine Style-Infos in HTML-Tags enthalten sein.

Edit: Achso, du meinst, dass ein Besucher einen JS-Code ins Gästebuch o.ä. schreibt.
Dafür gibts zum Beispiel .

Edit2: FYI: Das Einschleusen von fremden Code (zB JS) nennt man dann .
 
Zuletzt bearbeitet:
Hm, also ich möchte schon, dass der Benutzer Quelltext schreiben kann nur möchte ich das er nicht ausgeführt wird. Hier funktionierts ja auch...

Edit 1: Es muss ja irgendne Funktion geben die sagt: Ey mach das wie echo(); nur entschärf den Code....

Edit 2:

Jetzt nur noch JS...
 
Zuletzt bearbeitet:
Wenn ich -> Ein 'Anführungszeichen' ist <b>fett</b> durch htmlentities() laufen lasse kriege ich Ein 'Anführungszeichen' ist <b>fett</b> .
Das möchte ich aber nicht.

Wenn ich -> Ein 'Anführungszeichen' ist <b>fett</b> durch strip_tags() laufen lasse kriege ich Ein 'Anführungszeichen' ist <b>fett</b> aber es wird nicht ausgeführt wenn ich es später ausgebe...

Edit 1: Achso war das htmlentities() auf JS bezogen?
 
Mit htmlentities() werden afaik alle HTML-Zeichen (incl. < und >) ersetzt.

'Anf&uuml;hrungszeichen' ist &lt;b&gt;fett&lt;/b&gt;
Das ist doch genau das was du brauchst? Diese seltsamen Codes werden vom Browser dann umgewandelt, im Quelltext steht aber eben nur zB &lt;.
 
Wenn du auch mysqli zur Verfügung hast, kannst du auch SQL prepare verwenden:


Damit hast du das reine SQL-Injection Problem schonmal gelöst (ohne das leidige Thema \ und " escapen).



Warum du allerdings die Ausgabe von htmlentities nicht magst, versteh ich auch nicht...
Willst du gleichzeitig (interpretiertes, nicht 1:1 ausgegebenes) HTML im Text erlauben und verbieten? Dann sollt strip_tags doch passen...
 
Ich würde nicht vor dem Speichern der Daten htmlentities() drüber laufen lassen, sondern vor der Ausgabe zum Browser. So bleibt der Datenbankinhalt lesbar, falls man mal etwas nicht-HTMLiges damit anstellen will.
 

Online-Statistiken

Zurzeit aktive Mitglieder
3
Zurzeit aktive Gäste
50
Besucher gesamt
53

Beliebte Forum-Themen

Zurück
Oben Unten