W-gent and ObBot / Архив / Архив публикаций / Скрипт голосовалки

Скрипт голосовалки


 

Lleo Kaganov недавно возрадовал скриптом голосовалки. Ну, не в обиду одному из моих любимых (not gay!) авторов, затестил я его по второму варианту. Нет, а извините, а как ещё? Если цель - нахождение багов, то надо изначально настраиваться на то, что «скрипт - [далее по тексту]», а иначе заведомо ничего не выйдет.

В общем, затестил я его с двух браузеров под двумя IP-адресами и результат получил несколько странный. С одной стороны, проголосовать повторно скрипт мне не дал. С другой стороны, диагностику выдал несколько невнятную.

А тут ещё дело в том, что Lleo избегает выкладывать исходники своих скриптов на всеобщее обозрение. С одной стороны, оно и правильно бы - не зная исходного кода, труднее искать уязвимости. С другой стороны, это в корне ложно по той же самой причине.

Ладно, выкладываю, как и обещал, скриншот и ключевые фрагменты моей собственной голосовалки:

 

 

 

Далее показываю реализацию голосовалки у меня на obninsk.name:

 

[вызывающий скрипт]

[...]

if( ($vn!="") && ($qn!="") ) // $qn - номер вопроса, $vn - номер ответа для данного вопроса. Переданы как параметры.
 echo "<link rel="stylesheet" href="http://obninsk.name/vote/style.php?qn=$qn">"; //вызываем обработчик голосовалки

[...]

[вызываемый style.php]

[...]

$res=mysql_query("SELECT voted".((int)$vn)." FROM votes WHERE id=".((int)$qn) );
$r=mysql_result($res, 0, $field);
$votedp1=1+$r;

$res=mysql_query("SELECT id FROM voteip WHERE qid=".$qn." AND ip='".$ip."' AND dat='".$dat."'");
if(mysql_num_rows($res)==0) {
$res=mysql_query("INSERT INTO voteip (qid, ip, vn, dat) VALUES (".((int)$qn).", '".$ip."', ".((int)$vn).", '".$dat."')");
 mysql_query("UPDATE votes SET voted".((int)$vn)."=".$votedp1." WHERE id=".((int)$qn));
}
echo "<STY"."LE type="text/css"> ";
echo "body { color:red; } ";
echo ".mxvote { font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px;} "; /*  height:".$qn."px; width=".$votedp1."px; */
echo "</STY"."LE>";
[...]

 

И наконец, замечу, что и у моего, и у кагановского, и у большинства других скриптов есть ещё огромный недостаток: жадность. Для того, чтобы увидеть результаты, необходимо проголосовать. Нет голоса - нет результатов! Ну, моему-то скрипту простительно, он писался лет 5 тому назад, тогда на подобные мелочи внимания не обращали, "работает - и ладно". Да и то, как выберу время, непременно займусь переделкой. А то нехорошо получ Откуда посетителю знать, что его голос действительно зачтён, а не выданы цифры с потолка? В связи с последними политическими веяниями, доказывать, что ты не мухлюешь, в рунете приходится на каждом шагу!

Анекдот в тему:

ВЦИОМ провёл опрос "Доверяете ли Вы (безусловно доверяю, почти всегда доверяю, почти никогда не доверяю, не доверяю) опубликованным в российской прессе результатам опросов ВЦИОМ". Подделывать результаты пришлось от балды, так как программы впадали в рекурсию и зависали.