反射型服务器端跨站脚本¶
ID: rb/reflected-xss
Kind: path-problem
Security severity: 6.1
Severity: error
Precision: high
Tags:
- security
- external/cwe/cwe-079
- external/cwe/cwe-116
Query suites:
- ruby-code-scanning.qls
- ruby-security-extended.qls
- ruby-security-and-quality.qls
直接将用户输入(例如,HTTP 请求参数)写入网页,而没有事先对输入进行适当的清理,会导致跨站脚本漏洞。
建议¶
为了防止跨站脚本攻击,在将用户输入写入页面之前,请对其进行转义。一些框架,例如 Rails,默认情况下会隐式地执行此转义。
使用 html_safe
或 raw
等方法时要小心。它们可用于在不进行转义的情况下发出字符串,并且只应在字符串已被手动转义(例如,使用 Rails 的 html_escape
方法)或内容已保证安全(例如,硬编码字符串)时使用。
示例¶
以下示例是安全的,因为输出标签中的 params[:user_name]
内容在发出之前会自动进行 HTML 转义。
<p>Hello <%= params[:user_name] %>!</p>
但是,以下示例是不安全的,因为用户控制的输入在没有进行转义的情况下被发出,因为它被标记为 html_safe
。
<p>Hello <%= params[:user_name].html_safe %>!</p>
参考¶
OWASP: XSS Ruby on Rails Cheatsheet.
维基百科: 跨站脚本攻击.
通用弱点枚举: CWE-79.
通用弱点枚举: CWE-116.