当前位置:  开发笔记 > 编程语言 > 正文

为html和输入字段安全地转义输出

如何解决《为html和输入字段安全地转义输出》经验,为你挑选了1个好方法。

在我的Web应用程序中,用户可以输入文本数据.此数据可以显示给其他用户,原始作者也可以返回并编辑他们的数据.我正在寻找安全地逃避这些数据的正确方法.

我只是在进行sql清理,因此所有内容都会在读取时存储.假设我在数据库中有"似曾相识".或者,更加极端,一个

这样做的原因是表单是动态的 - 用户可以随意添加或删除字段,因此它们是在页面加载后生成的.

所以似乎jQuery正在逃避数据进入输入,但它还不够好 - 如果我自己不做任何事情,用户仍然可以放入标签,查杀代码并插入恶意代码.但是这里有另一个论点要做.由于只有原作者才能在输入框中看到文字,我是否应该打扰?基本上他们可以执行XSS攻击的唯一人就是他们自己.



1> Álvaro Gonzá..:

对不起,我无法重现你描述的行为.我一直使用htmlspecialchars()(它的任务基本相同htmlentities()),它永远不会导致任何形式的双重编码.页面源显示déjà vu在两个地方(当然!这就是重点!)但是呈现的页面显示了适当的值,这是发送回服务器的内容.

你可以发布一个完整的自包含代码片段,表现出这样的行为吗?

更新:一些测试代码:








 ¿foo?';

if( !isset($_GET['foo']) ){
    $_GET['foo'] = $default_value;
}

?>

回答更新的问题

htmlentities()顾名思义,该函数在生成HTML输出时使用.这就是为什么它在你的第二个例子中没什么用处:JavaScript 不是 HTML.它是一种自己的语言,有自己的语法.

现在,您要解决的问题是如何生成遵循以下两个规则的输出:

    它是JavaScript中的有效字符串.

    它可以安全地嵌入HTML文档中.

我知道的#1最接近的PHP函数是json_encode().由于JSON语法是JavaScript的子集,因此如果您使用PHP字符串提供它,它将输出JavaScript字符串.

就像#2一样,一旦浏览器进入JavaScript块,它就会期望一个标签离开它.json_encode()函数负责处理并正确转义它(<\/script>).

我修改过的测试代码:

 ¿foo?';

if( !isset($_GET['foo']) ){
    $_GET['foo'] = $default_value;
}

?>










注意:utf8_encode()从ISO-8859-1转换为UTF-8,如果您的数据已经是UTF-8(推荐),则不需要.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有