ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

12.08.2009, 18:49
|
|
Участник форума
Регистрация: 09.12.2008
Сообщений: 159
Провел на форуме: 2144019
Репутация:
214
|
|
Сообщение от Qwazar
Эмм, а вам не кажется что в этом поле значением является не цифра, и такой фикс не катит?
Ну я протестил и XSS небыло 
|
|
|

12.08.2009, 18:53
|
|
Reservists Of Antichat - Level 6
Регистрация: 15.03.2009
Сообщений: 560
Провел на форуме: 4358210
Репутация:
2017
|
|
что предложиш? я просто в пхп не силен на столько  да вроде поставив int он вроде как все равно работает 
|
|
|

12.08.2009, 19:04
|
|
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме: 10605912
Репутация:
4693
|
|
XSS то не проходит, но логику приложения вы нарушили, к примеру вот этот код никогда не выполнится, из-за вашего "фикса":
PHP код:
if ($returnto == "main")
header("Location: $DEFAULTBASEURL");
Фиксить, когда значение является строкой, можно к примеру, так:
Код:
<input type=hidden name=returnto value="<?=htmlspecialchars($_GET["returnto"])?>">
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..
Мой блог: http://qwazar.ru/.
Последний раз редактировалось Qwazar; 12.08.2009 в 19:21..
|
|
|

12.08.2009, 19:08
|
|
Reservists Of Antichat - Level 6
Регистрация: 15.03.2009
Сообщений: 560
Провел на форуме: 4358210
Репутация:
2017
|
|
тока что хотел предложить htmlentities поставить
strip_tags()
htmlspecialchars()
stripslashes()
mysql_real_escape_string
еще же эти можно да?
|
|
|

12.08.2009, 19:17
|
|
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме: 10605912
Репутация:
4693
|
|
strip_tags() - однозначно нет.
htmlspecialchars - да.
stripslashes(), mysql_real_escape_string - вообе из другой оперы.
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..
Мой блог: http://qwazar.ru/.
|
|
|

12.08.2009, 19:29
|
|
Reservists Of Antichat - Level 6
Регистрация: 15.03.2009
Сообщений: 560
Провел на форуме: 4358210
Репутация:
2017
|
|
ясно 
|
|
|

12.08.2009, 19:50
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
strip_tags удаляет теги, у нее есть баги.
htmlspecialchars преобразует специальные символы в HTML сущности - тру защита от XSS.
stripslashes удаляет экранирование символов, произведенное функцией addslashes() - вообще не в тему.
mysql_real_escape_string() экранирует специальные символы в строке, используемой в SQL-запросе. Тру защита от инъ, но не XSS.
|
|
|

12.08.2009, 23:23
|
|
Участник форума
Регистрация: 09.12.2008
Сообщений: 159
Провел на форуме: 2144019
Репутация:
214
|
|
Фикс файла usersearch.php
Найти:
PHP код:
<td valign="middle" class=rowhead>Имя:</td>
<td<?=$_GET['n']?$highlight:""?>><input name="n" type="text" value="<?=$_GET['n']?>" size=35></td>
Заменить на:
PHP код:
<td valign="middle" class=rowhead>Имя:</td>
<td<?=$_GET['n']?$highlight:""?>><input name="n" type="text" value="<?=htmlspecialchars($_GET['n'])?>" size=35></td>
Найти:
PHP код:
$options = array("равен","выше","ниже","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(($_GET['rt']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменяем на:
PHP код:
$options = array("равен","выше","ниже","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['rt']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
PHP код:
<input name="r" type="text" value="<?=$_GET['r']?>" size="5" maxlength="4">
<input name="r2" type="text" value="<?=$_GET['r2']?>" size="5" maxlength="4"></td>
Заменить на:
PHP код:
<input name="r" type="text" value="<?=htmlspecialchars($_GET['r'])?>" size="5" maxlength="4">
<input name="r2" type="text" value="<?=htmlspecialchars($_GET['r2'])?>" size="5" maxlength="4"></td>
Найти:
PHP код:
$options = array("(Любой)","Подтвержден","Не подтвержден");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(($_GET['st']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменить на:
PHP код:
$options = array("(Любой)","Подтвержден","Не подтвержден");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['st']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
PHP код:
<tr><td valign="middle" class=rowhead>Email:</td>
<td<?=$_GET['em']?$highlight:""?>><input name="em" type="text" value="<?=$_GET['em']?>" size="35"></td>
<td valign="middle" class=rowhead>IP:</td>
<td<?=$_GET['ip']?$highlight:""?>><input name="ip" type="text" value="<?=$_GET['ip']?>" maxlength="17"></td>
Заменить на:
PHP код:
<tr><td valign="middle" class=rowhead>Email:</td>
<td<?=$_GET['em']?$highlight:""?>><input name="em" type="text" value="<?=htmlspecialchars($_GET['em'])?>" size="35"></td>
<td valign="middle" class=rowhead>IP:</td>
<td<?=$_GET['ip']?$highlight:""?>><input name="ip" type="text" value="<?=htmlspecialchars($_GET['ip'])?>" maxlength="17"></td>
Найти:
PHP код:
$options = array("(Любой)","Нет","Да");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(($_GET['as']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменить на:
PHP код:
$options = array("(Любой)","Нет","Да");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['as']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
PHP код:
<td valign="middle" class=rowhead>Комментарий:</td>
<td<?=$_GET['co']?$highlight:""?>><input name="co" type="text" value="<?=$_GET['co']?>" size="35"></td>
<td valign="middle" class=rowhead>Маска:</td>
<td<?=$_GET['ma']?$highlight:""?>><input name="ma" type="text" value="<?=$_GET['ma']?>" maxlength="17"></td>
<td valign="middle" class=rowhead>Класс:</td>
<td<?=($_GET['c'] && $_GET['c'] != 1)?$highlight:""?>><select name="c"><option value='1'>(Любой)</option>
Заменить на:
PHP код:
<td valign="middle" class=rowhead>Комментарий:</td>
<td<?=$_GET['co']?$highlight:""?>><input name="co" type="text" value="<?=htmlspecialchars($_GET['co'])?>" size="35"></td>
<td valign="middle" class=rowhead>Маска:</td>
<td<?=$_GET['ma']?$highlight:""?>><input name="ma" type="text" value="<?=htmlspecialchars($_GET['ma'])?>" maxlength="17"></td>
<td valign="middle" class=rowhead>Класс:</td>
<td<?=((int)$_GET['c'] && (int)$_GET['c'] != 1)?$highlight:""?>><select name="c"><option value='1'>(Любой)</option>
Найти:
PHP код:
$class = $_GET['c'];
if (!is_valid_id($class))
$class = '';
Заменить на:
PHP код:
if (!is_valid_id($_GET['c']))
$class = '';
$class = (int) $_GET['c'];
Найти:
PHP код:
<td valign="middle" class=rowhead>Регистрация:</td>
<td<?=$_GET['d']?$highlight:""?>><select name="dt">
<?
$options = array("в","раньше","после","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['dt']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменить на:
PHP код:
<td valign="middle" class=rowhead>Регистрация:</td>
<td<?=$_GET['d']?$highlight:""?>><select name="dt">
<?
$options = array("в","раньше","после","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['dt']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
PHP код:
<input name="d" type="text" value="<?=$_GET['d']?>" size="12" maxlength="10">
<input name="d2" type="text" value="<?=$_GET['d2']?>" size="12" maxlength="10"></td>
Заменить на:
PHP код:
<input name="d" type="text" value="<?=htmlspecialchars($_GET['d'])?>" size="12" maxlength="10">
<input name="d2" type="text" value="<?=htmlspecialchars($_GET['d2'])?>" size="12" maxlength="10"></td>
Найти:
PHP код:
<td valign="middle" class=rowhead>Раздал:</td>
<td<?=$_GET['ul']?$highlight:""?>><select name="ult" id="ult">
<?
$options = array("ровно","больше","меньше","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(($_GET['ult']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменить на:
PHP код:
<td valign="middle" class=rowhead>Раздал:</td>
<td<?=$_GET['ul']?$highlight:""?>><select name="ult" id="ult">
<?
$options = array("ровно","больше","меньше","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['ult']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
PHP код:
<input name="ul" type="text" id="ul" size="8" maxlength="7" value="<?=$_GET['ul']?>">
<input name="ul2" type="text" id="ul2" size="8" maxlength="7" value="<?=$_GET['ul2']?>"></td>
Заменить на:
PHP код:
<input name="ul" type="text" id="ul" size="8" maxlength="7" value="<?=htmlspecialchars($_GET['ul'])?>">
<input name="ul2" type="text" id="ul2" size="8" maxlength="7" value="<?=htmlspecialchars($_GET['ul2'])?>"></td>
Найти:
PHP код:
<td valign="middle" class="rowhead">Донор:</td>
<td<?=$_GET['do']?$highlight:""?>><select name="do">
<?
$options = array("(Любой)","Да","Нет");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(($_GET['do']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменить на:
PHP код:
<td valign="middle" class="rowhead">Донор:</td>
<td<?=$_GET['do']?$highlight:""?>><select name="do">
<?
$options = array("(Любой)","Да","Нет");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['do']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
PHP код:
<td valign="middle" class=rowhead>Последняя активность:</td>
<td <?=$_GET['ls']?$highlight:""?>><select name="lst">
<?
$options = array("в","раньше","после","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(($_GET['lst']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменить на:
PHP код:
<td valign="middle" class=rowhead>Последняя активность:</td>
<td <?=$_GET['ls']?$highlight:""?>><select name="lst">
<?
$options = array("в","раньше","после","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['lst']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
PHP код:
<input name="ls" type="text" value="<?=$_GET['ls']?>" size="12" maxlength="10">
<input name="ls2" type="text" value="<?=$_GET['ls2']?>" size="12" maxlength="10"></td>
Заменить на:
PHP код:
<input name="ls" type="text" value="<?=htmlspecialchars($_GET['ls'])?>" size="12" maxlength="10">
<input name="ls2" type="text" value="<?=htmlspecialchars($_GET['ls2'])?>" size="12" maxlength="10"></td>
Найти:
PHP код:
<td valign="middle" class=rowhead>Скачал:</td>
<td<?=$_GET['dl']?$highlight:""?>><select name="dlt" id="dlt">
<?
$options = array("ровно","больше","меньше","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(($_GET['dlt']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменить на:
PHP код:
<td valign="middle" class=rowhead>Скачал:</td>
<td<?=$_GET['dl']?$highlight:""?>><select name="dlt" id="dlt">
<?
$options = array("ровно","больше","меньше","между");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['dlt']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
PHP код:
<input name="dl" type="text" id="dl" size="8" maxlength="7" value="<?=$_GET['dl']?>">
<input name="dl2" type="text" id="dl2" size="8" maxlength="7" value="<?=$_GET['dl2']?>"></td>
Заменить на:
PHP код:
<input name="dl" type="text" id="dl" size="8" maxlength="7" value="<?=htmlspecialchars($_GET['dl'])?>">
<input name="dl2" type="text" id="dl2" size="8" maxlength="7" value="<?=htmlspecialchars($_GET['dl2'])?>"></td>
Найти:
PHP код:
<td valign="middle" class=rowhead>Предупрежден:</td>
<td<?=$_GET['w']?$highlight:""?>><select name="w">
<?
$options = array("(Любой)","Да","Нет");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(($_GET['w']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Заменить на:
PHP код:
<td valign="middle" class=rowhead>Предупрежден:</td>
<td<?=$_GET['w']?$highlight:""?>><select name="w">
<?
$options = array("(Любой)","Да","Нет");
for ($i = 0; $i < count($options); $i++){
echo "<option value=$i ".(((int)$_GET['w']=="$i")?"selected":"").">".$options[$i]."</option>\n";
Найти:
PHP код:
// name
$names = explode(' ',trim($_GET['n']));
Заменить на:
PHP код:
// name
$names = explode(' ',trim(htmlspecialchars($_GET['n'])));
Найти:
PHP код:
$q .= ($q ? "&" : "") . "n=".urlencode(trim($_GET['n']));
Заменить на:
PHP код:
$q .= ($q ? "&" : "") . "n=".urlencode(trim(htmlspecialchars($_GET['n'])));
Найти:
PHP код:
// email
$emaila = explode(' ', trim($_GET['em']));
Заменить на:
PHP код:
// email
$emaila = explode(' ', trim(htmlspecialchars($_GET['em'])));
Найти:
PHP код:
$q .= ($q ? "&" : "") . "em=".urlencode(trim($_GET['em']));
Заменить на:
PHP код:
$q .= ($q ? "&" : "") . "em=".urlencode(trim(htmlspecialchars($_GET['em'])));
Найти:
PHP код:
//class
// NB: the c parameter is passed as two units above the real one
$class = $_GET['c'] - 2;
Заменить на:
PHP код:
//class
// NB: the c parameter is passed as two units above the real one
$class = (int) $_GET['c'] - 2;
Найти:
PHP код:
// IP
$ip = trim($_GET['ip']);
Заменить на:
PHP код:
// IP
$ip = trim(htmlspecialchars($_GET['ip']));
Найти:
PHP код:
// ratio
$ratio = trim($_GET['r']);
Заменить на:
PHP код:
// ratio
$ratio = trim(htmlspecialchars($_GET['r']));
Найти:
PHP код:
$where_is .= isset($where_is)?" AND ":"";
$where_is .= " (u.uploaded/u.downloaded)";
$ratiotype = $_GET['rt'];
Заменить на:
PHP код:
$where_is .= isset($where_is)?" AND ":"";
$where_is .= " (u.uploaded/u.downloaded)";
$ratiotype = (int) $_GET['rt'];
Найти:
PHP код:
$ratio2 = trim($_GET['r2']);
if(!$ratio2)
Заменить на:
PHP код:
$ratio2 = trim(htmlspecialchars($_GET['r2']));
if(!$ratio2)
Найти:
PHP код:
// comment
$comments = explode(' ',trim($_GET['co']));
Заменить на:
PHP код:
// comment
$comments = explode(' ',trim(htmlspecialchars($_GET['co'])));
Найти:
PHP код:
// uploaded
$ul = trim($_GET['ul']);
Заменить на:
PHP код:
// uploaded
$ul = trim((int)$_GET['ul']);
Найти:
PHP код:
$where_is .= isset($where_is)?" AND ":"";
$where_is .= " u.uploaded ";
$ultype = $_GET['ult'];
Заменить на:
PHP код:
$where_is .= isset($where_is)?" AND ":"";
$where_is .= " u.uploaded ";
$ultype = (int)$_GET['ult'];
Найти:
PHP код:
$ul2 = trim($_GET['ul2']);
if(!$ul2)
Заменить на:
PHP код:
$ul2 = trim((int)$_GET['ul2']);
if(!$ul2)
Найти:
PHP код:
// downloaded
$dl = trim($_GET['dl']);
Заменить на:
PHP код:
// downloaded
$dl = trim((int)$_GET['dl']);
Найти:
PHP код:
$dltype = $_GET['dlt'];
$q .= ($q ? "&" : "") . "dlt=$dltype";
if ($dltype == "3")
{
$dl2 = trim($_GET['dl2']);
if(!$dl2)
Заменить на:
PHP код:
$dltype = (int)$_GET['dlt'];
$q .= ($q ? "&" : "") . "dlt=$dltype";
if ($dltype == "3")
{
$dl2 = trim((int)$_GET['dl2']);
if(!$dl2)
Найти:
PHP код:
$datetype = $_GET['dt'];
$q .= ($q ? "&" : "") . "dt=$datetype";
if ($datetype == "0")
Заменить на:
PHP код:
$datetype = (int)$_GET['dt'];
$q .= ($q ? "&" : "") . "dt=$datetype";
if ($datetype == "0")
Найти:
PHP код:
$q .= ($q ? "&" : "") . "ls=$last";
$lasttype = $_GET['lst'];
Заменить на:
PHP код:
$q .= ($q ? "&" : "") . "ls=$last";
$lasttype = (int)$_GET['lst'];
Найти:
PHP код:
// status
$status = $_GET['st'];
Заменить на:
PHP код:
// status
$status = (int)$_GET['st'];
Найти:
PHP код:
// account status
$accountstatus = $_GET['as'];
Заменить на:
PHP код:
// account status
$accountstatus = (int)$_GET['as'];
Найти:
PHP код:
//donor
$donor = $_GET['do'];
Заменить на:
PHP код:
//donor
$donor = (int)$_GET['do'];
Найти:
PHP код:
//warned
$warned = $_GET['w'];
Заменить на:
PHP код:
//warned
$warned = (int)$_GET['w'];
Найти:
PHP код:
// disabled IP
$disabled = $_GET['dip'];
Заменить на:
PHP код:
// disabled IP
$disabled = htmlspecialchars($_GET['dip']);
Найти:
PHP код:
// active
$active = $_GET['ac'];
Заменить на:
PHP код:
// active
$active = (int)$_GET['ac'];
PS: Выдрано из сборки Kinokpk.
И ещё баг в usersearch.php, данные о количестве постов в комментариях съезжают влево, не вставая в ячейки таблицы!
Найти:
PHP код:
"|".($n_comments?"<a href=userhistory.php?action=viewcomments&id=".$user['id'].">$n_comments</a>":$n_comments).
Заменить на:
PHP код:
"<td><div align=center>".($n_comments?"<a href=userhistory.php?action=viewcomments&id=".$user['id'].">$n_comments</a>":$n_comments).
Последний раз редактировалось 1ce666; 12.08.2009 в 23:37..
|
|
|

13.08.2009, 10:46
|
|
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме: 10605912
Репутация:
4693
|
|
тут ты ошибаешься:
Вот это:
PHP код:
//class
// NB: the c parameter is passed as two units above the real one
$class = $_GET['c'] - 2;
не надо менять на вот это:
PHP код:
//class
// NB: the c parameter is passed as two units above the real one
$class = (int) $_GET['c'] - 2;
Т.к. математические операции предотвращают XSS. Т.е. $a = 0 + $_GET['a'] - всегда будет числом.
З.Ы.
Ну это то что бросается в глаза. Уверен в твоих фиксах есть ещё избыточные и не совсем логичные.
К примеру ты много где делаешь trim от числа, как тут:
PHP код:
$dl2 = trim((int)$_GET['dl2']);
Зачем? Тут либо ты ошибся, и разработчик ожидает в этом поле не число, то ли у разработчика руки кривые, но тогда trim можно вообще не переносить в фикс, т.к. (int) переведёт строку в число, даже если перед цифрами стоят пробелы.
З.Ы.Ы.
Вот если бы ты к каждому твоему фиксу показал пример использования XSS, то было бы понятно, что к чему 
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..
Мой блог: http://qwazar.ru/.
Последний раз редактировалось Qwazar; 13.08.2009 в 10:56..
|
|
|

13.08.2009, 11:11
|
|
Познающий
Регистрация: 22.06.2009
Сообщений: 41
Провел на форуме: 47299
Репутация:
18
|
|
А не проще-ли usersearch.php выкинуть наф? 
+ привязать юзерские сессии к ипам т.е ип и некая хрень известная только нам и будет солью для КУКИСОВ т.е фактически мы нифелируем почти весь эффект + ну да и заблочить внешние post что-б через xss не сделали iframe что шлет post на takeprofedit.php с изменением мыла (пароль нельзя сменить не зная старого)
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|