[英]Is it necessary to “escape” character “<” and “>” for javascript string?
有時,服務器端將生成要嵌入內聯JavaScript代碼的字符串。 例如,如果“UserName”應由ASP.NET生成。 然后看起來像。
<script>
var username = "<%UserName%>";
</script>
這不安全,因為用戶可以擁有他/她的名字
</script><script>alert('bug')</script></script>
這是XSS漏洞。
所以,基本上,代碼應該是:
<script>
var username = "<% JavascriptEncode(UserName)%>";
</script>
JavascriptEncode的作用是在“/”,“'”和“”之前添加字符“\\”。因此,輸出html就像.var username =“</ script> alert(\\'bug \\')</ script > </ SCRIPT>“;
瀏覽器不會將“ </ script> ”解釋為腳本塊的結尾。 所以,XSS避免了。
但是,那里仍然有“<”和“>”。 建議也要逃避這兩個字符。 首先,我認為將“<”改為“&lt;”並不是一個好主意。 和“>”到“&gt;” 這里。 並且,我不確定將“<”更改為“\\ <”並且“>”更改為“\\>”可以被所有瀏覽器識別。 似乎沒有必要對“<”和“>”進行進一步編碼。
對此有什么建議嗎?
謝謝。
根據您使用的標記語言,問題有不同的答案。
如果您使用的是HTML,那么您不能用實體表示它們,因為腳本元素被標記為包含CDATA。
如果您使用的是XHTML,那么您可以將它們表示為具有顯式CDATA標記的CDATA,或者您可以使用實體來表示它們。
如果您正在使用XHTML,但是將其作為text / html提供,那么您需要編寫符合XHTML規則但仍適用於text / html解析器的內容。 這通常意味着使用顯式CDATA標記並在JavaScript中對它們進行注釋。
<script type="text/javascript">
// <![CDATA[
…
// ]]>
</script>
不久前,我寫了一些關於這個的方法和原因 。
不,你不應該在HTML中的<script>
中使用HTML實體來逃避<
和>
。
\\
替換為\\\\
和"
with \\"
) </
with <\\/
,以防止轉義出<script>
元素。 在XHTML中它更復雜。
]]>
替換為]]]]><![CDATA[>
以防止轉義它(除了JavaScript字符串轉義)。 text/html
發送(99%的人都這樣做),那么您必須同時使用XML CDATA塊,XML CDATA轉義和HTML轉義。 便宜又簡單的方法:
<script type="text/javascript">
var username = "<%= Encode(UserName) %>";
</script>
其中Encode
中的編碼方案是將輸入的每個字符轉換為與JavaScript兼容的關聯\\xABCD
表示。
另一種便宜又簡單的方法:
<script type="text/javascript">
var username = decodeBase64("<%= EncodeBase64(UserName) %>");
</script>
如果你只處理ASCII。
當然, pst
用嚴格的方式擊中頭部。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.