2015-07-20 153 views
0

我在看OWSAP防止片,但我得到了與規則編號混淆2.HTML屬性逃逸

規則#2 - 屬性逃生插入不可信數據轉換成HTML常見屬性之前 規則#2是將不可信的數據放入典型的屬性值,如寬度,名稱,值等。這不應該用於像href,src,style,或任何事件處理程序(如onmouseover)的複雜屬性。事件處理程序屬性應該遵循HTML JavaScript數據值的規則#3是非常重要的。

什麼是複雜的屬性,不應該逃脫的理由,(這不應該被用於諸如HREF,SRC,風格複雜屬性),這將創建一個歧義或破壞屬性的值?

https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

回答

1

這並不是說他們不應該逃脫,那就是逃離他們不足以使對XSS數據安全。


轉義數據會阻止它跳出屬性並啓動新的屬性或元素。

這是不夠的,如果屬性是一個已經可以執行JavaScript的屬性。

這很容易受到XSS:

$external_input = '"><script>alert("got you");</script>'; 
?><input class="<?php echo $external_input ?>"> 

但是如果你逃$external_input那麼屬性值只是成爲無稽之談。這不是有害的。

另一方面,以下內容允許即使HTML轉義也可以執行任意腳本。

$external_input = 'alert("got you");'; 
?><input onmouseover="<?php echo htmlspecialchars($external_input); ?>"> 

您需要確保數據是安全的任何數據格式的值(然後你還是應該逃避它)。

將值放在href屬性中?確保它是一個URL並且URL方案是您信任的一個(例如http:而不是像javascript:)。

將一個值放在腳本中?將它轉義爲JS(通常使用JSON編碼器)。

依此類推。