我是否需要在输入字段中转义html输出?

时间:2015-08-23 11:30:56

标签: javascript php html xss htmlspecialchars

在我的数据库中,我有数据,例如代码,例如:this is another text { another inner text }

我从数据库中获取数据,我需要在输入字段中填充它们。然后我的用户可以编辑代码。我混淆了是否需要在输入字段中转义javascript代码,因为我知道如果用<script type="text/javascript">alert('Xss done');</script><label>元素等显示它,只需要转义它。

但是现在我正在使用该代码获取警报框。我应该逃脱吗?如果是,那么我如何正确地逃避它,因为我使用此代码<p>并且输入字段中的javascript代码成功转为此htmlspecialchars($user_input, ENT_QUOTES)但我仍然收到警报框?

请帮帮我,谢谢你。

2 个答案:

答案 0 :(得分:1)

您使用htmlspecialchars()的权利。这是一个有效的例子:

<input type="text" value="<?php
    echo htmlspecialchars('<script type="text/javascript">alert("Xss done");/script>')
?>"/>

produces

<input type="text" value="&lt;script type=&quot;text/javascript&quot;&gt;alert(&quot;Xss done&quot;);&lt;/script&gt;"/>

这将显示<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?