簡體   English   中英

PHP - 在您的代碼中有多個 htmlentities()

[英]PHP - Having more than one htmlentities() in your code

我剛剛遇到在PHP中構建一個CRUD應用程序,講師提醒我們使用htmlentities()以避免HTML 注入,然后他說htmlentities不應該在您的代碼中多次調用,我的問題很簡單……為什么?

干杯

因為在相同的值上再次調用它可以對其進行雙重編碼。

PHP 文檔為例:

$str = "A 'quote' is <b>bold</b>";

$firstEntity = htmlentities($str);
// Outputs: A 'quote' is &lt;b&gt;bold&lt;/b&gt;

現在,如果我們再次通過htmlentities()運行它,它將對第一個htmlentities()調用創建的 & 符號進行編碼,您最終將得到一個雙編碼字符串:

$secondEntity = htmlentities($firstEntity);
// Outputs: A 'quote' is &amp;lt;b&amp;gt;bold&amp;lt;/b&amp;gt;

關於 escaping,有兩件重要的事情需要了解:

  • 您不應該在相同的值上運行相同的轉義 function 兩次 例如htmlentities('1 > 2')會給你1 &gt; 2 1 &gt; 2 ,但htmlentities(htmlentities('1 > 2'))會給你1 &amp;gt; 2 1 &amp;gt; 2 .
  • 您應該只在將數據發送到某處時運行轉義函數。 在 HTML escaping 的情況下,您應該在發送到瀏覽器時執行此操作,而不是在保存到數據庫時或在應用程序中某處組合不同字符串時執行此操作。 如果你不這樣做,你實際上並不知道正確的逃逸 function 使用,並且很可能最終導致數據損壞,甚至引入新的漏洞。

說“只在一個地方做”是記住這兩件事的一種方式:如果你在 output 它的時候立即做,你就不會意外地雙重轉義同一個字符串,也不會應用錯誤的 escaping對於您將在其他地方使用的字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM