需要HTML Purifier和preg_match / $ _ GET / $ _ POST / FILTER_VALIDATE_EMAIL?

问题描述 投票:0回答:2

我想询问是否需要使用html净化器来避免XSS攻击,如果:

  1. 已经使用了preg_ match例如: $userid = $_POST["userid"]; if(!preg_match("/^[a-zA-Z0-9]{3,15}$/", $userid)){ alerts('INVALID')

警报功能与switch case一起显示在url alert中,如...?alert = invalidid

  1. filter_var($email, FILTER_VALIDATE_EMAIL
  2. 我正在使用window.location.href.indexOf('alert') != -1)需要它以某种方式过滤值警报?
  3. 我还使用$_GET['alert']来比较哪个警报实际上在url中以回应bootstrap div class="alert-danger"。我需要使用html净化器吗?谢谢你的回答。在案例3中,我不知道该怎么做。
php security xss htmlpurifier
2个回答
0
投票
  1. 像这样使用preg_match验证是一个很好的安全措施,但你的前一行$userid = $_POST["userid"]本身就很脆弱。始终确保检查值是否设置,而不是null$userid = isset($_POST["userid"] && $POST_["userid"] !== null)

关于你的“警报功能与开关案例在网址警告中显示如...?alert = invalidid”,它取决于你的'show'的确切含义,但请注意,显示用户输入的信息反馈给用户是XSS的主要向量。如果您在HTML内容,HTML属性或JavaScript数据值中“显示”它,那么它是不安全的,您只需编码以下内容:

 & --> &
 < --> &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
  1. 这取决于您使用的PHP版本。假设你高于PHP 5.2.1(你当然应该这样,因为它们不再受支持),FILTER_VALIDATE_EMAIL是对电子邮件地址的良好验证。如果您使用的是PHP 5.2.1或更低版本,那么您就是vulnerable
  2. 我不知道为什么。 alert绝不是XSS的唯一JavaScript方法。以console.log为例。
  3. $_GET['alert']在回显到页面时容易受到XSS的攻击,但是通过上面列出的六个转换,这将不再可能。

使用像HTML Purifier这样的东西总是一个好主意。即使你已经完全强化了XSS,你也可以防范未来潜在的XSS漏洞。

我还建议阅读official OWASP guide以防止XSS。


0
投票

在尝试将这些值提交到表之前,我为每个验证设置了一个标志〜我假设你要提交值:)使用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>
";

?>

我在警报窗口添加了一个id,在关闭按钮上添加了一个类,但没有提供css,因为它超出了您的请求范围。

© www.soinside.com 2019 - 2024. All rights reserved.