XSS已經成為非常流行的網站攻擊方式,為了安全起見,盡量避免用戶的輸入。可是有些情況下不僅不避免,反而要求鼓勵輸入,比如寫博客。博客園開放性很高,可以運行手寫的JS。之前比較著名的例子就是,凡是看到某一篇文章的,都自動關注他。
如果避免跨站攻擊的話,我們就得對用戶的輸入,進行轉義。例如<script type='text/javascript'>alert('hello world')</script>。如果直接保存這個字符串的話,然后再輸出的話,就會運行JS了。我們需要將這個字符串轉義成"<script type='text/javascript'>alert('hello world')</script>"。
轉義,就是一個個字符的匹配,然后轉換。看着不難,但是需要轉義的字符也不少。另外當字符數量大的時候,效率成為一個問題。下面我寫一個函數,讓瀏覽器底層幫我們做到。
function stringEncode(str){
var div=document.createElement('div');
if(div.innerText){
div.innerText=str;
}else{
div.textContent=str;//Support firefox
}
return div.innerHTML;
}
