当我们使用htmlentities编码用户的输入数据以防止跨站点脚本编写时,为什么html输出和浏览器输出不同?

时间:2019-06-02 15:46:29

标签: php xss

为了防止跨站点脚本编写,我正在使用htmlentities。但是我对代码的输出有一点怀疑。

$str = "Albert Einstein said: 'E=MC²'";
$enc = htmlenities($str);

使用此代码,我正在编码用户的输入数据。因此,变量$ enc将为

Albert Einstein said: 'E=MC&sup2;'<br>

但是当呈现此代码并提供输出时,输出将为

Albert Einstein said: 'E=MC²'

我的疑问是我们还没有解码$ enc,输出应该显示为

Albert Einstein said: 'E=MC&sup2;'<br>

为什么会这样?

1 个答案:

答案 0 :(得分:0)

  

某些字符保留在HTML中。

假设我们想用HTML编写一些东西来显示图像。

然后,我们将编写<img src="someimage.jpg" />,浏览器将加载并呈现页面中的图像。

现在考虑我们有一个学习型网站,我们想教给观众如何在网页中加载图像。那我们现在该怎么办?

要显示这些保留字符,我们需要使用HTML实体,浏览器将为我们处理它。

  

HTML中保留的字符必须替换为字符实体。

     

键盘上不存在的字符也可以替换   按实体。

您可以在w3schools-https://www.w3schools.com/html/html_entities.asp中了解它。