在我的数据库中,我有数据,例如代码,例如:this is another text
{
another inner text
}
我从数据库中获取数据,我需要在输入字段中填充它们。然后我的用户可以编辑代码。我混淆了是否需要在输入字段中转义javascript代码,因为我知道如果用<script type="text/javascript">alert('Xss done');</script>
或<label>
元素等显示它,只需要转义它。
但是现在我正在使用该代码获取警报框。我应该逃脱吗?如果是,那么我如何正确地逃避它,因为我使用此代码<p>
并且输入字段中的javascript代码成功转为此htmlspecialchars($user_input, ENT_QUOTES)
但我仍然收到警报框?
请帮帮我,谢谢你。
答案 0 :(得分:1)
您使用htmlspecialchars()
的权利。这是一个有效的例子:
<input type="text" value="<?php
echo htmlspecialchars('<script type="text/javascript">alert("Xss done");/script>')
?>"/>
<input type="text" value="<script type="text/javascript">alert("Xss done");</script>"/>
这将显示<input>
字段,其中包含文本(包括<scripts>
标记)并且不会触发任何警报。 <{1}}的{{3}} ENT_COMPAT | ENT_HTML401
应该没问题。
答案 1 :(得分:1)
我是否需要在输入字段中转义html输出?
是的,必须转义每个输入。特别是如果它来自用户。你永远不应该相信用户的输入。
htmlspecialchars
有一些错误,你不能在它的第二个和第三个参数中直接包含字符串。因此需要一种解决方法。
从PHP 5.4+开始,默认字符集为UTF-8
,之前为ISO-8859-1
ENT_IGNORE
只会删除所有无效代码。这有两个原因:首先,您不会注意到无效编码,因为它将被简单地删除。其次,这会带来一定的安全风险
ENT_SUBSTITUTE
这是一个新的替代选项,它在问题上采用了更明智的方法:它不会只删除代码单元,而是由Unicode字符(U+FFFD)
替换。因此无效的代码单元序列将被替换为 字符。
/**
* htmlspecialchars fix|hack. Well done PHP, well done...
*/
define('CHARSET', 'UTF-8');
define('REPLACE_FLAGS', ENT_QUOTES | ENT_SUBSTITUTE);
function filter($string = null)
{
return htmlspecialchars($string, REPLACE_FLAGS, CHARSET);
}
有关如何防止XSS的更多信息,SQL注入请参阅以下链接: https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet How can I prevent SQL injection in PHP?