Использование такой проверки preg_match
является хорошей мерой безопасности, но ваша предыдущая строка $userid = $_POST["userid"]
сама по себе уязвима.Всегда проверяйте, чтобы это значение было установлено, а не null
:
$userid = isset($_POST["userid"] && $POST_["userid"] !== null)
Относительно ваших предупреждений " является функцией с переключателемчтобы отображать в URL-адресе предупреждение как ...? alert = invalidid", это зависит от того, что именно вы подразумеваете под" show ", но учтите, что отображение информации, введенной пользователем обратно пользователю, является основным вектором для XSS.Если вы «отображаете» его в содержимом HTML, атрибутах HTML или значениях данных JavaScript, это небезопасно, все, что вам нужно, это закодировать следующим образом:
& --> &
< --> <
> --> >
" --> "
' --> ' ' not recommended because its not in the HTML spec (See: section 24.4.1) ' is in the XML and XHTML specs.
/ --> / 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.