Очиститель HTML и preg_match / $ _ GET / $ _ POST / FILTER_VALIDATE_EMAIL - нужен? - PullRequest
0 голосов
/ 14 февраля 2019

Я хочу спросить, нужно ли мне использовать html очиститель, чтобы избежать атак XSS, если:

  1. уже используется preg_ match, например:

    $userid = $_POST["userid"]; if(!preg_match("/^[a-zA-Z0-9]{3,15}$/", $userid)){ alerts('INVALID')

функция оповещений - это функция с регистром переключателя, отображаемым в предупреждении URL, например ...? Alert = invalidid

filter_var($email, FILTER_VALIDATE_EMAIL

Я использую window.location.href.indexOf('alert') != -1) Нужно ли фильтровать значения для предупреждения?

У меня также есть функция с $_GET['alert'], чтобы сравнить, какое предупреждение на самом деле находится в URL для эхо-загрузки div class="alert-danger".Нужно ли использовать очиститель HTML?Спасибо за ответы.В случае 3 я не знаю, как это сделать.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Я бы установил флаг для каждой проверки, прежде чем пытаться зафиксировать эти значения в таблице. Я предполагаю, что вы собираетесь фиксировать значения :) Используйте всплывающее окно с активированным php и разрешите пользователю закрыть всплывающее окно.используя JQuery JS.Если кто-то отключит js и попытается возиться с ним, он просто не будет вставлять или обновлять, но окно, сообщающее ему, что он сделал не так, все равно будет там, он просто не сможет закрыть его.

<?php
$userid = "";
if (isset($_POST['userid'])) {
$userid = $_POST["userid"];

if (!preg_match("/^[a-zA-Z0-9]{3,15}$/", $userid)) {
$flag = "user id error";
echo "
<div id='user-id-alert'>$flag
<input type='button' value='X' onclick='closePopup()' class='button-close' />
</div>
";
}
}

echo "
<script>
function closePopup() {
var elem = document.getElementById('#user-id-alert');
$('#user-id-alert').hide(200);
return false;
}
</script>
";

?>

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

0 голосов
/ 14 февраля 2019
  1. Использование такой проверки preg_match является хорошей мерой безопасности, но ваша предыдущая строка $userid = $_POST["userid"] сама по себе уязвима.Всегда проверяйте, чтобы это значение было установлено, а не null:

    $userid = isset($_POST["userid"] && $POST_["userid"] !== null)

Относительно ваших предупреждений " является функцией с переключателемчтобы отображать в URL-адресе предупреждение как ...? alert = invalidid", это зависит от того, что именно вы подразумеваете под" show ", но учтите, что отображение информации, введенной пользователем обратно пользователю, является основным вектором для XSS.Если вы «отображаете» его в содержимом HTML, атрибутах HTML или значениях данных JavaScript, это небезопасно, все, что вам нужно, это закодировать следующим образом:

 & --> &amp;
 < --> &lt;
 > --> &gt;
 " --> &quot;
 ' --> &#x27;     &apos; not recommended because its not in the HTML spec (See: section 24.4.1) &apos; is in the XML and XHTML specs.
 / --> &#x2F;     forward slash is included as it helps end an HTML entity

Это зависит от версии PHP, которую вы используете.Предполагая, что вы выше PHP 5.2.1 (что, безусловно, должно быть, поскольку они больше не поддерживаются), FILTER_VALIDATE_EMAIL является хорошей проверкой адресов электронной почты.Если вы используете PHP 5.2.1 или ниже, вы уязвимы .

Я не уверен почему.alert ни в коем случае не единственный метод JavaScript для XSS.Возьмем, к примеру, console.log.

$_GET['alert'] уязвимо для XSS при отражении обратно на страницу, но с шестью преобразованиями, перечисленными выше, это больше не будет возможно.

Использование чего-то вроде HTML Purifier всегда хорошая идея.Даже если вы уже полностью защищены от XSS, вы защищаете себя от потенциальных будущих XSS уязвимостей.

Я также рекомендовал бы прочитать официальное руководство по OWASP по предотвращению XSS.

...