我需要在输入字段中转义 html 输出吗?
Do I need to escaping html output in input field?
在我的数据库中,我有数据,例如这样的代码:<script type="text/javascript">alert('Xss done');</script>
我从数据库中获取数据,我需要将它们填充到输入字段中。然后我的用户可以编辑代码。我混淆了我是否需要在我的输入字段中转义 javascript 代码,因为我知道如果你用 <label>
或 <p>
元素等显示它,你只需要转义它
但现在我收到了带有该代码的警告框。我应该逃避它吗?如果是,那么我如何正确地转义它,因为我使用此代码 htmlspecialchars($user_input, ENT_QUOTES)
并且输入字段中的 javascript 代码成功地变成了此 <script type="text/javascript">alert('Xss done');</script>
但我仍然收到警告框? ?
请帮助我,谢谢。
您使用 htmlspecialchars()
的权利。这是一个有效的例子:
<input type="text" value="<?php
echo htmlspecialchars('<script type="text/javascript">alert("Xss done");/script>')
?>"/>
哪个produces
<input type="text" value="<script type="text/javascript">alert("Xss done");</script>"/>
这将按原样显示带有文本的 <input>
字段(包括 <scripts>
标记)并且不会触发任何警报。 default flags ENT_COMPAT | ENT_HTML401
for htmlspecialchars()
应该没问题。
Do I need to escaping html output in input field?
是的,每个输入都必须转义。特别是如果它来自用户。你永远不应该相信用户的输入。
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?
在我的数据库中,我有数据,例如这样的代码:<script type="text/javascript">alert('Xss done');</script>
我从数据库中获取数据,我需要将它们填充到输入字段中。然后我的用户可以编辑代码。我混淆了我是否需要在我的输入字段中转义 javascript 代码,因为我知道如果你用 <label>
或 <p>
元素等显示它,你只需要转义它
但现在我收到了带有该代码的警告框。我应该逃避它吗?如果是,那么我如何正确地转义它,因为我使用此代码 htmlspecialchars($user_input, ENT_QUOTES)
并且输入字段中的 javascript 代码成功地变成了此 <script type="text/javascript">alert('Xss done');</script>
但我仍然收到警告框? ?
请帮助我,谢谢。
您使用 htmlspecialchars()
的权利。这是一个有效的例子:
<input type="text" value="<?php
echo htmlspecialchars('<script type="text/javascript">alert("Xss done");/script>')
?>"/>
哪个produces
<input type="text" value="<script type="text/javascript">alert("Xss done");</script>"/>
这将按原样显示带有文本的 <input>
字段(包括 <scripts>
标记)并且不会触发任何警报。 default flags ENT_COMPAT | ENT_HTML401
for htmlspecialchars()
应该没问题。
Do I need to escaping html output in input field?
是的,每个输入都必须转义。特别是如果它来自用户。你永远不应该相信用户的输入。
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?