Стоит ли беспокоиться о внедрении PHP, если я не использую MySQL? - PullRequest
7 голосов
/ 20 января 2010

Я использую простой PHP-скрипт для запуска онлайн-комикса, который в основном использует GET, чтобы получить целочисленное значение n и вставить тег img для n .jpg. Он не выполняет никакой дезинфекции или проверки ошибок, за исключением того, что существует n .jpg. Единственное взаимодействие пользователя со сценарием происходит через этот GET, и другой, который делает то же самое со строкой, чтобы вручную отобразить другой шаблон для тестирования.

Мой вопрос, стоит ли мне беспокоиться об уколе? И если так, что я должен сделать, чтобы предотвратить это? Все, что я нашел до сих пор, касается только инъекции MySQL, которая в данном случае неприменима.

Ответы [ 8 ]

5 голосов
/ 20 января 2010

Если вы не используете базу данных, то, очевидно, SQL-инъекция не имеет значения для вас. Точно так же, если вы не сохраняете какие-либо данные, представленные пользователем, для отображения другим пользователям, Межсайтовый скриптинг не является проблемой. Это оставляет такие вещи, как eval() или выполнение внешних процессов, которые злоумышленник может подорвать, но это также не похоже на то, что вы делаете что-либо подобное.

Так что вы, вероятно, в безопасности. Тем не менее, было бы хорошо иметь минимальное количество проверок ошибок, чтобы просто привыкнуть. Например, вы говорите, что у вас есть целочисленный параметр GET. Этого нет - все параметры HTTP являются строками неявности. PHP стирает различие, но вам определенно следует явно привести его к int, чтобы убедиться, что это не какая-то строка, предназначенная для использования уязвимости XSS, внедрения SQL или eval (даже если ее нет).

3 голосов
/ 20 января 2010

Вы всегда должны беспокоиться о безопасности. Не каждая дыра в безопасности создается неправильным использованием mysql: -)

2 голосов
/ 20 января 2010

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

Если вы используете переменную из GET, рассмотрите ниже URL:

 index.php?myvar=<script>alert(document.cookie);</script>

Хакеры могут указывать выше URL различными способами: hex, utf и т. Д.

Плохой парень может изменить ваши переменные GET для выполнения XSS-атак. XSS является корнем многих дыр в безопасности. Вы должны учитывать это тоже.

Если вы ожидаете числовой тип от вашей переменной GET, рассмотрите следующий код:

$myvar = (int) $_GET['your_var'];

Вы должны использовать функцию htmlentities , чтобы предотвратить атаки XSS.

1 голос
/ 20 января 2010

Если вы ожидаете число, не очищайте неправильный ввод, откажитесь от него.

if ( !ctype_digit($user_input) ) {
    header('Location: error.php'); // or whatever page
    exit;
}
1 голос
/ 20 января 2010

Если get должен содержать только целое число, используйте

$n = intval($_GET['n'])

0 голосов
/ 20 января 2010

Вам не нужно беспокоиться о внедрении SQL. Но вы должны проверить свои данные, так как они используются в HTML, который вы генерируете. Представьте, что я даю кому-то эту ссылку http://www.example.com/viewComic.php?id="/><script type="text/javascript>alert("XSS");</script><img src="22. У этого человека будет небольшое всплывающее окно с вашего сайта. И много плохого можно сделать с помощью JavaScript. Для получения дополнительной информации, вы можете начать читать страницу википедии о XSS .

Итак, вы должны проверить, что ожидаемое число - это число. Например, с is_numeric .

0 голосов
/ 20 января 2010

Я бы также запросил попадание в каталог нужных вам изображений, так как вы не хотите, чтобы люди просматривали ваш файловый сервер с такими запросами, как example.com/?q=../../.htaccess

Я не уверен, как это повлияет на вывод, но это не может быть хорошо.

0 голосов
/ 20 января 2010

Всегда проверяйте пользовательский ввод и данные $ _GET и $ _POST на наличие вредоносного контента. Addslashes, ereg_match и intval - ваш друг ...

Если вам это сойдет с рук, установите

allow_url_fopen = Off

директива в php.ini

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...