Программист Дроздовский Михаил
Карта сайта | Форум  

DROZD. / Разное / Статьи

Статьи и заметки обо всем, что имеет какое-либо отношение к созданию сайтов.
Информация о веб-дизайне, программировании, типографике и работе с контентом — все здесь.

  Опубликовано на journalist.artotron.com
   

 

 

Небольшая справка по безопасности

Автор: М. Дроздовский
 
Собственно, это статья о трех небольших проблемах в безопасности подавляющего
числа "самодельных" скриптов.


1. Возможность SQL-injection. Внимательно изучите этот кусок
кода (PHP):



$conn = mysql_connect("localhost", "zz", "zz")

mysql_select_db("test", $conn)


$sql = "SELECT adminpwd FROM data WHERE login=\'$login\' ";

$a = mysql_query($sql, $conn)

$z = mysql_result($a, 1)


...



Допустим, скрипт называется script.php и параметр login передается ему в виде
script.php?login=ssss . Вы видите, что параметр login никак не проверяется.
А что будет, если вместо login=admin передать login=\'admin ? Будет ошибка SQL-запроса,
ведь к базе данных передается запрос SELECT adminpwd FROM data WHERE login=\'\'admin\'
.


В такой ситуации злоумышленник может исполнить любой SQL-запрос (использовав,
например union).


Защита от этого предельно проста: использовать функцию mysql_escape_string($string)



2. Возможность исполнения произвольной команды. Необходимо
всегда проверять включаемые файлы, особенно не рекомендуется использовать include($inc),
если переменная $inc передается через адресную строку.


3. Возможность переопределения переменных. Возьмем такой пример:



$file=file("zz.txt")

$cc=count($file)

$c = 0;

while($c < $cc) {

$f .= $file[$c++];

}


...


?>


Допустим, что $f в конце цикла содержит какую-нибудь важную информацию из файла.
Или, что еще хуже, она исполняется командой cmd($f)


Так как переменная $f не определена в начале скрипта (должно быть $f="";),
то ее начальное значение может определить пользователь (введя в адресной строке
что-нибудь вроде script.php?f=ddddd).


В зависимости от важности переменной $f будет варьироваться вред, который сможет
причинить злоумышленник. Если, конечно, он угадает название переменной и ее
значение.

 

 


Copyright © 2004 — 2010 Дроздовский Михаил