PHP 中的 htmlspecialchars() 或 Ruby on Rails 中的 h() 是否足以防御所有 XSS(跨站点脚本)攻击? [英] is htmlspecialchars() in PHP or h() in Ruby on Rails good enough for defending all cases of XSS (Cross-site scripting) attacks?

查看:46
本文介绍了PHP 中的 htmlspecialchars() 或 Ruby on Rails 中的 h() 是否足以防御所有 XSS(跨站点脚本)攻击?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

PHP 中的 htmlspcialchars($user_data) 或 Ruby on Rails 中的 h(user_data) 是否足以防御所有 XSS(跨站点脚本)攻击?使用的编码或任何其他可能的考虑因素如何?

Is htmlspcialchars($user_data) in PHP or h(user_data) in Ruby on Rails good enough for defending all cases of XSS (Cross-site scripting) attacks? What about encoding used or any other possible considerations?

推荐答案

htmlspecialcharsh 都对 HTML 中可能有特殊含义的所有字符进行转义,没有办法可以将文字 HTML 注入目标页面.

Both htmlspecialchars and h escape all characters that may have special meaning in HTML, there is no way that literal HTML may be injected into the target page.

但是,有一些方法可以执行(危险的)Javascript,不需要 HTML 注入.例如,如果您有一个应用程序将 [img http://example.com/img.jpg] 转换为 <img src="http://example.com/img.jpg/>,想象一下如果用户输入 [img javascript:alert(document.cookies);] 会发生什么.转义 HTML 字符不会在这里保存你,你必须清理给定的 URL.这是一个相当全面的可能的 XSS 漏洞示例列表.

However, there are ways to execute (dangerous) Javascript that do not require HTML injection. For example, if you have an application that converts [img http://example.com/img.jpg] to <img src="http://example.com/img.jpg/>, imagine what may happen if a user enters [img javascript:alert(document.cookies);]. Escaping HTML characters will not save you here, you have to sanitise the given URLs. This is a fairly comprehensive list of possible XSS vulnerability examples.

如果你总是使用 htmlspecialchars/h 你总是完全清理用作任何 HTML 元素中的属性值的用户输入,然后你有适当的 XSS 防御.

If you always use htmlspecialchars/h and you always completely sanitise user input that is used as attribute values in any HTML elements, then you have a proper XSS defence.

这篇关于PHP 中的 htmlspecialchars() 或 Ruby on Rails 中的 h() 是否足以防御所有 XSS(跨站点脚本)攻击?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆