Показать сообщение отдельно
Непрочитано 20.07.2012, 18:09   #2
Аватар для Pocan
Пользователь

По умолчанию Re: Подскажите по скрипту

Вообще не грамотно составленный скрипт, так как для всех чисел, особенно подставляемых в склейку MySQL запроса, нужно использовать как минимум intval(), а еще лучше пользоваться приведением типов и приводить к числу.

Теперь вкратце по самому скрипту.

PHP код:
if ($type == 2

     
$count $top_bonus['count_sms']; 

else 

     
$count $top_bonus['count_site']; 

Не смог проследить переменную $top_bonus, она видимо находится в config/config.php, импортируемый почти в самом начале. Но в любом случае я бы сделал как минимум вот так:
PHP код:
if ($type == 2

     
$count = (int)$top_bonus['count_sms']; 

else 

     
$count = (int)$top_bonus['count_site']; 

Но если есть 100% уверенность, что $top_bonus['count_sms'] и $top_bonus['count_site'] - числа, то в принципе можно оставить все как есть в этом куске кода.

Но есть еще более опасный момент вот с этим запросом:
PHP код:
$sql mysql_query("SELECT * FROM `top_vote` WHERE `name` = '".$player."' AND `time` = '".$date."';"); 
Через переменную $date можно провести SQL инъекцию, если попадется недобросовестный топ серверов или просто будет подменена ссылка на список проголосовавших. Почему? Сейчас объясню. Разберемся с происхождением ссылки (выстрою ввиде кода с комментариями):
PHP код:
//читаем файл $topfile и записываем каждую его строчку в массив
$file file($topfile); 
//каждую строку рассматриваем отдельно
foreach ($file as $line)
{
   
//режем строку по табу
   
$parts explode("\t"$line); 
   
//расфасовываем куски строки по переменным
   
$date $parts[1];  //но ведь не факт, что тут будет число, а вдруг недоброжелатель подставит тут кусок SQL запроса?
   
$name $parts[3];  //тут тоже не известно, что будет, поэтому лучше фильтровать получаемые данные или проверять (и то, и то можно сделать, например, при помощи регулярок)
   
$type $parts[4];  //аналогично

Ну, хотя, если данный скрипт предназначен для топов типа L2Top или MMOTop, то SQL инъекцию врятли кто-то будет внедрять через этот файл, но иногда сайт топа может не загрузиться этим скриптом и тогда в переменной $file окажутся ошибки со страницы.
Pocan вне форума Ответить с цитированием