Aufheben der Sicherheitslücke!
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
antwort
beschreibung
constant
eindeutige antwort
eingabe
falsche zeile
fehler
gen
gespeicherten daten
komma
kommentar
konstant
manual
nachfolgende fehlermeldung
parameter
quelltext
rewind
sonderzeichen
tag
zeichenkette
-
Also bei tag/eingabe">Eingaben von Userseite, sollten die Gespeicherten Daten keine scripte, die den Quellcode beeinflussen enthalten sein. Sollte ein Script eingegeben werden, muss es durch Sicherheitsma?nahmen im eigenen Eingabescript abgesichert werden. Ich habe mal hier versucht so eine Ma?nahme zu treffen.
Leider funktioniert das Script nicht ganz. Wenn ihr mir bei der Auffindung des Fehlers behilflich sein k?nntet, w?re das sehr nett. Ich denke, dass der Fehler im oberen Bereich ist, da das speichern und ausgeben ohne Pr?fung funktioniert.
<?
$location = "http://www.domain.de";
$pretext = $HTTP_POST_VARS["kommentar"];
$val = array('/^[a-zA-Z \.,;\"\'?\!\?]+$/', '/^[0-9-]+$/');
if($text!=""){
$text = "<font color='#FF0000'><b>Admin<b>: Bitte keine Script Eingabe!</font>";
foreach($val as $k => $v){
if(preg_match($v, $pretext)){
$text = $pretext;
break;
}
}
$text = ereg_replace("\[:)\]","<img border='0' src='../grafik/smilavat/smile01.gif' width='15' height='15'>",$text);
$text = nl2br($text);
$text = stripslashes($text);
$dat = fopen("$file","r+");
$save_old = fread($dat, filesize($file)+1);
$save_new = $save_old;
$save_new .= "<p style='margin-left: 9; margin-right: 0; margin-top: 0; margin-bottom: 6' align='left'>".$text."</p>";
rewind($dat);
fwrite($dat, $save_new);
fclose($dat);
header("Location: $location");
} else{
header("Location: $location");
}
?>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
<?
$location = "http://www.domain.de";
$kommentar = htmlspecialchars($HTTP_POST_VARS[kommentar], ENT_QOUTES);
echo $kommentar;
fertig :D
dadurch werden alle sojnderzeichen und so entfernt
sollte es ja auch, so hab ichs verstanden
den rest kansnte ja selber hinzuf?gen -
dadurch werden alle sojnderzeichen und so entfernt
Welche Sonderzeichen sind damit gemeint? Also Punkt, Komma und so sollten eigentlich schon eingegeben werden k?nnen. aber so Scripting sollte nicht m?glich sein. W?rde es reichen wenn >< verboten w?rde und wenn ja, geht das mit dem was du geschrieben hast? -
jap
htmlspecialchars entfernt alle html, java script, php etc. tags und so
und wandelt alles in diese hier um © f?r diese copyright zeichen z.b.
voll genial -
Es funktioniert nicht. Die Fehlermeldung ist:
Warning: htmlspecialchars() expects parameter 2 to be long, string given in /home/webpages/lima-city/econline/html/btanetwork/800x600/savetext.php on line 7
Warning: Cannot modify header information - headers already sent by (output started at /home/webpages/lima-city/econline/html/btanetwork/800x600/savetext.php:7) in /home/webpages/lima-city/econline/html/btanetwork/800x600/savetext.php on line 67 -
Das passiert, wenn man Code einfach kopiert, statt zuerstmal zu verstehen
$kommentar = htmlspecialchars($HTTP_POST_VARS[kommentar], ENT_QOUTES);
Diese Funktion wirft einen Fehler. Warum?
Die Antwort findest du hier:
http://www.php.net/manual/de/function.htmlspecialchars.php
---
Beschreibung
string htmlspecialchars ( string string [, int quote_style [, string charset]])
----
Der zweite Parameter muss eine Zahl sein, keine Zeichenkette.
Doch woher kommt die Zeichenkette? Woher kommt eigentlich die Konstante?
Die Antwort steht einige S?tze weiter auf der Webseite:
---
und doppelten Anf?hrungsstriche behandelt werden sollen. Der Modus ENT_COMPAT (default) ist abw?rtskompatibel und behandelt nur die doppelten, nicht aber die einfachen Anf?hrungsstriche. ENT_QUOTES behandelt beide und ENT_NOQUOTES keine Art(en) von Anf?hrungszeichen.
---
Nun vergleich mal die Konstante, die im Quelltext steht, mit dem die im Handbuch steht.
Doch woher kommt der String?
Auch darauf liefert das PHP-Manual eine eindeutige Antwort:
http://www.php.net/manual/de/language.constants.php
---
Falls Sie eine undefinierte Konstante verwenden nimmt PHP an, dass Sie den Namen der Konstanten selber meinen, genauso als ob Sie einen string (CONSTANT vs "CONSTANT") angegeben h?tten.
---
Die nachfolgende Fehlermeldung ist die Folge der ersten. -
Aus dem Manual werde ich nicht schlau. (Das soll nicht hei?en das ich nichts in Manuals verstehe^^)
Deshalb frage ich ja auch hier wo der fehler sein kann. Und es w?r sehr nett wenn mir jemand den string erkl?ren w?rde, was genau definiert werden muss. -
Ein simpler Tipp-Fehler: es mussen heissen ENT_QUOTES, nicht ENT_QOUTES
Was den String angeht, PHP ist freundlich eine nicht definierte Konstante in eine Konstante umzuwandlen, der einen String enth?lt, dessen Inhalt der Namen der Kosntante ist.
Die (falsche) Zeile sieht f?r PHP deshalb so aus:
$kommentar = htmlspecialchars($HTTP_POST_VARS[kommentar], "ENT_QOUTES");
-
Jo, danke!
Es war der Tipfehler. Es funktioniert jetzt. Man kann keine scriptings mehr in dem Formular machen. Danke nochmal an alle die mir geholfen haben. :xyxthumbs:
Wenn ihr euch das mal anschauen wollt (bitte erst als Gast anmelden):
http://econline.gotdns.com/btanetwork/800x600/bta_protokoll_bc_001.php
EDit: Thema hat sich erledigt bzw. die Anfangsfrage ist beantwortet. Thread kann geschlossen werden.
Beitrag ge?ndert am 19.01 09:56 von econline -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage