2015年8月12日 星期三

防範XSS (Cross Site Scripting) 攻擊

之前寫的網頁有拿去做弱點掃描, 被掃出來發現有嚴重的XSS
請教神人同事後, 他建議我針對有傳參數的部分要進行encode(什麼是encode?)
其實我覺得XSS很類似SQL injection

先來看看可能被XSS攻擊的網頁長什麼樣子

test.html
<html>
  <form action="test.asp" method="get">
    <input name="tid" type="text" />
    <input type="submit" />
  </form>
</html>
test.asp
<html>
  <input type="text" name="get_tid" id="get_tid" value="<%= request("tid") %>" />
</html>

接著在test.html的textbox輸入下面字串
120" onMouseOver=alert('XSS_attack') size="1
Submit後, 把滑鼠游標移到test.asp的textbox上, 會出現alert視窗, 這就是比較常見的XSS攻擊


接下來, 我們要來修正test.asp, 避免XSS攻擊
我這邊提供修正的方法是利用前面一開始說的encode輸入字串

test.asp
<html>
<input type="text" name="get_tid" id="get_tid" value="" />

<script language="javascript">
  document.getElementById("get_tid").value=encodeURIComponent("<%= request("tid") %>");
</script>
</html>

encodeURIComponent()其實就是把輸入字串中特殊符號重新編碼, 避免字串中含有惡意攻擊碼

沒有留言:

張貼留言