我想询问是否需要使用html净化器来避免XSS攻击,如果:
$userid = $_POST["userid"]; if(!preg_match("/^[a-zA-Z0-9]{3,15}$/", $userid)){
alerts('INVALID')
警报功能与switch case一起显示在url alert中,如...?alert = invalidid
filter_var($email, FILTER_VALIDATE_EMAIL
window.location.href.indexOf('alert') != -1)
需要它以某种方式过滤值警报?$_GET['alert']
来比较哪个警报实际上在url中以回应bootstrap div class="alert-danger"
。我需要使用html净化器吗?谢谢你的回答。在案例3中,我不知道该怎么做。preg_match
验证是一个很好的安全措施,但你的前一行$userid = $_POST["userid"]
本身就很脆弱。始终确保检查值是否设置,而不是null
:
$userid = isset($_POST["userid"] && $POST_["userid"] !== null)
关于你的“警报功能与开关案例在网址警告中显示如...?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
FILTER_VALIDATE_EMAIL
是对电子邮件地址的良好验证。如果您使用的是PHP 5.2.1或更低版本,那么您就是vulnerable。alert
绝不是XSS的唯一JavaScript方法。以console.log
为例。$_GET['alert']
在回显到页面时容易受到XSS的攻击,但是通过上面列出的六个转换,这将不再可能。使用像HTML Purifier这样的东西总是一个好主意。即使你已经完全强化了XSS,你也可以防范未来潜在的XSS漏洞。
我还建议阅读official OWASP guide以防止XSS。
在尝试将这些值提交到表之前,我为每个验证设置了一个标志〜我假设你要提交值:)使用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,因为它超出了您的请求范围。