а вот про авто-регу с капчей я че-то не понял твоего кода... imagestring = 0... i do beleive, this is the fix for admin/core.php /*foreach ($_GET as $key => $value) $GLOBALS[$key] = $value; foreach ($_POST as $key => $value) $GLOBALS[$key] = $value; foreach ($_COOKIE as $key => $value) $GLOBALS[$key] = $value;*/ extract($_GET, EXTR_SKIP); extract($_POST, EXTR_SKIP); я ниче не пропустил?
а про авто-регу? а этот код он как делает: то-же самое что и старый, только если переменная уже есть - оно ее не тронет
Про авторегу не ко мне, я не вникал. З.Ы. А попадать могут те, которые на COOKIE завязаны, или переписывают переменные.
XSS вроде не было такой =) http://10.235.11.163/treker/makepoll.php?action=edit&pollid=2&returnto=%20%3E%3Cscript%3Ealert(/Hi/)%3C/script%3E
PHP: $b = get_row_count("captcha", "WHERE imagehash = ".sqlesc($_POST["imagehash"])." AND imagestring = ".sqlesc($_POST["imagestring"])); Проблема в том что sqlesc() экранирует только параметры отличные от numeric. И получаеться что мы просовываем SQL запрос вида: Code: SELECT * FROM captcha WHERE imagehash = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' AND imagestring = 0 И MySQL цепляет запись из таблицы с imagehash равным 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' а т.к. там у нас 0 без '' MySQL по моему вообще не смотрит данное значение и возвращает результат в итоге $b у нас равна 1, что дает нам спокойно зарегестрироваться P.S. SQL запрос конечно не такой но лень было лезть и смотреть функцию get_row_count(), а так я забыл че в ней содержиться. xD
Окей, тогда пофикшу принудительной кавычкацией. sqlesc($something, true); function sqlesc($value, $force = false) { // Stripslashes /*if (get_magic_quotes_gpc()) { $value = stripslashes($value); }*/ // Quote if not a number or a numeric string if (!is_numeric($value) || $force) { $value = "'" . mysql_real_escape_string($value) . "'"; } return $value; } ваще какой-то бред сказанул...
Ну смотри - если imagehash = 32-а 0-ка то это выйдет 0 и imagestring = 0 что выйдет SELECT COUNT(*) FROM captcha WHERE imagehash = 0 AND imagestring = 0; что ваще-то должно тоже вернуть 0 и $b должно тоже быть 0!
XSS http://localhost/treker/testport.php?port=%3E%3Cscript%3Ealert(/Hi/)%3C/script%3E Code: if ($_SERVER["REQUEST_METHOD"] == "POST") $port = $_POST["port"]; else $port = $_GET['port']; ................................................................ <font color=darkgreen><br><center><b>IP: $ip is on the Port: $port good !</b></center><br></font> можно просто ввести скрипт в поле =) ибо и $port = $_POST["port"]; через POST посылается
PHP: $port = $_POST["port"]; else $port = $_GET['port']; Заменяем на: PHP: $port = (int)$_POST["port"]; else $port = (int)$_GET['port'];
PHP: <input type=hidden name=returnto value=<?=$_GET["returnto"]?>> Заменяем на: PHP: <input type=hidden name=returnto value=<?=(int)$_GET["returnto"]?>> Подсказал HAXTA4OK
что предложиш? я просто в пхп не силен на столько да вроде поставив int он вроде как все равно работает
XSS то не проходит, но логику приложения вы нарушили, к примеру вот этот код никогда не выполнится, из-за вашего "фикса": PHP: if ($returnto == "main") header("Location: $DEFAULTBASEURL"); Фиксить, когда значение является строкой, можно к примеру, так: Code: <input type=hidden name=returnto value="<?=htmlspecialchars($_GET["returnto"])?>">