inanattributename
<...NEVERPUTUNTRUSTEDDATAHERE...href="/test"/> inatagname
更重要的是,不要接受來自不可信任來源的JavaScript代碼然後運行,例如,名為“
callback”的參數就包含JavaScript代碼段,沒有解碼能夠解決。
– 在向HTML元素內容插入不可信數據前對HTML解碼
這條規則適用於當你想把不可信數據直接插入HTML正文某處時,這包括內部正常標籤(div、p、b、td等)。大多數網站框架都有HTML解碼的方法且能夠躲開下列字元。但是,這對於其他HTML context是遠遠不夠的,你需要部署其他規則。
...ESCAPEUNTRUSTEDDATABEFOREPUTTINGHERE...
...ESCAPEUNTRUSTEDDATABEFOREPUTTINGHERE...
以及其他的HTML常用元素
使用HTML實體解碼躲開下列字元以避免切換到任何執行內容,如腳本、樣式或者事件處理程序。在這種規格中推薦使用十六進位實體,除了XML中5個重要字元(&、<、 >、 "、 ')外,還加入了斜線符,以幫助結束HTML實體。
&-->&
<--><
>-->>
"-->"
'-- >''isnotrecommended
/-- >/forwardslashisincludedasithelpsendanHTMLentity
– 在向HTML常見屬性插入不可信數據前進行屬性解碼
這條規則是將不可信數據轉化為典型屬性值(如寬度、名稱、值等),這不能用於複雜屬性(如href、src、style或者其他事件處理程序)。這是及其重要的規則,事件處理器屬性(為HTML JavaScript Data Values)必須遵守該規則。
insideUNquotedattribute insidesinglequotedattribute insidedoublequotedattribute除了字母數字字元外,使用小於256的ASCII值HH格式(或者命名的實體)對所有數據進行解碼以防止切換屬性。這條規則應用廣泛的原因是因為開發者常常讓屬性保持未引用,正確引用的屬性只能使用相應的引用進行解碼。未引用屬性可以被很多字元破壞,包括[space] % * + , - / ; < = > ^ 和 |。
– 在向HTML JavaScript Data Values插入不可信數據前,進行JavaScript解碼
這條規則涉及在不同HTML元素上制定的JavaScript事件處理器。向這些事件處理器放置不可信數據的唯一安全位置就是“data value”。在這些小代碼塊放置不可信數據是相當危險的,因為很容易切換到執行環境,因此請小心使用。
insideaquotedstring
onesideofanexpression
insideUNquotedeventhandler 除了字母數字字元外,使用小於256的ASCII值xHH格式 對所有數據進行解碼以防止將數據值切換至腳本內容或者另一屬性。不要使用任何解碼捷徑(如" )因為引用字元可能被先運行的HTML屬性解析器相匹配。如果事件處理器被引用,則需要相應的引用來解碼。這條規則的廣泛應用是因為開發者經常讓事件處理器保持未引用。正確引用屬性只能使用相應的引用來解碼,未引用屬性可以使用任何字元(包括[space] % * + , - / ; < = > ^ 和|)解碼。同時,由於HTML解析器比JavaScript解析器先運行,關閉標籤能夠關閉腳本塊,即使腳本塊位於引用
字元串中。
– 在向HTML 樣式屬性值插入不可信數據前,進行CSS解碼
當你想將不可信數據放入樣式表或者樣式標籤時,可以用此規則。CSS是很強大的,可以用於許多攻擊。因此,只能在屬性值中使用不可信數據而不能在其他樣式數據中使用。不能將不可信數據放入複雜的屬性(如url,、behavior、和custom (-moz-binding))。同樣,不能將不可信數據放入允許JavaScript的IE的
expression屬性值。
propertyvalue
text propertyvalue
除了字母數字字元外,使用小於256的ASCII值HH格式對所有數據進行解碼。不要使用任何解碼捷徑(如" )因為引用字元可能被先運行的HTML屬性解析器相匹配,防止將數據值切換至腳本內容或者另一屬性。同時防止切換至expression或者其他允許腳本的屬性值。如果屬性被引用,將需要相應的引用進行解碼,所有的屬性都應該被引用。未引用屬性可以使用任何字元(包括[space] % * + , - / ; < = > ^ 和|)解碼。同時,由於HTML解析器比JavaScript解析器先運行,標籤能夠關閉腳本塊,即使腳本塊位於引用字元串中。
- 在向HTML URL屬性插入不可信數據前,進行URL解碼
當你想將不可信數據放入鏈接到其他位置的link中時需要運用此規則。這包括
href和src屬性。還有很多其他位置屬性,不過我們建議不要在這些屬性中使用不可信數據。需要注意的是在javascript中使用不可信數據的問題,不過可以使用上述的HTML JavaScript Data Value規則。
ascriptsource
除了字母數字字元外,使用小於256的ASCII值%HH 解碼格式對所有數據進行解碼。在數據中保護不可信數據:URL不能夠被允許,因為沒有好方法來通過解碼來切換URL以避免攻擊。所有的屬性都應該被引用。未引用屬性可以使用任何字元(包括[space] % * + , - / ; < = > ^ 和|)解碼。請注意實體編碼在這方面是沒用的。