博客 / 詳情

返回

HTML應用安全

XSS (Cross-site scripting)

XSS,跨站腳本攻擊。

SQL注入(SQL injection)

在接受不確定輸入內容(如第三方站點消息,URL參數,用户創建的文本批註等)時,在使用前對數據進行驗證並且在展示時進行適當的編碼是必不可少的,否則,可能會有惡意用户對網站進行攻擊,輕者只是傳遞不規範的數據,嚴重的可能攻擊服務器,擾亂網站正常運行,如,注入SQL腳本清除服務器上所有數據等。

通常編寫過濾器驗證用户輸入時,過濾器應該是基於白名單(已知的安全結構)配置編寫,允許白名單通過,不允許其他輸入;而基於黑名單(已知的不安全結構)配置編寫,即允許除了黑名單之外的所有輸入,是不安全的,因為還有許多未知的不安全事物。

JavaScript腳本注入

通常我們根據URL中的指定參數,返回給用户不同頁面,提供給用户如下導航:

<ul>
    <li><a href="blog.jhss.com?id=Home">Home</a>
    <li><a href="blog.jhss.com??id=About">About Site</a>
    <li><a href="blog.jhss.com??id=Account">My Account</a>
</ul>

如上,若以上URL沒有編碼直接展示給用户,惡意攻擊者可以截斷URL並插入一個script元素:

http://blog.jhss.com/?id=%3Cscript%3Ealert%28%27Oh%20no%21%27%29%3C/script%3E

若其他用户訪問這個URL頁面,則會執行注入的script標籤內的任意腳本,惡意者可以指定惡意代碼,竊取用户信息。

還有很多方式被用來欺騙站點執行注入的代碼,如下是我們應該考慮的方面:

  1. 當時用看似無害的元素時,應該限制其可以使用的屬性。如,<img>元素,如果允許使用onload屬性,則攻擊者可以使用onload屬性添加回調函數執行任意指定代碼。
  2. 當允許插入<base>元素時,意味着當前頁面所有<script>元素指向的相對地址都會被<base>指定的值攔截,並且頁面中所有的表單提交都會被重定向到惡意站點。

跨站請求偽造CSRF(Cross-site request forgery)

CSRF(Cross-site request forgery跨站請求偽造,也被稱為“One Click Attack”或者Session Riding,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用。儘管聽起來像跨站腳本(XSS),但它與XSS非常不同,並且攻擊方式幾乎相左。XSS利用站點內的信任用户,而CSRF則通過偽裝來自受信任用户的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進行防範的資源也相當稀少)和難以防範,所以被認為比XSS更具危險性。

分析原因與解決方法

若站點允許用户提交表單,如申請修改密碼,進行購物結算等,就必須確定該次請求是用户主動發起,而不是別的站點誘騙用户進行請求的,這個問題是因為HTML中表單是允許跨域提交的。

站點為了防止這類攻擊,主要可以從兩方面進行:

  1. 提交表單時填充和用户相關特定的隱藏令牌(tokens
  2. 檢查每一個用户請求的Origin頭,即請求來源

點擊劫持(Clickjacking)

提供用户界面給用户操作,支持用户進行交互的頁面,有時候惡意者會誘騙用户激活某些動作,然後對點擊的鏈接進行劫持,引導到惡意網站,進行某些危險交互,這也是我們需要關注的。

要避免這些情況,對於一些不需要展示在frame窗口內的站點,只允許不在frame窗口時才展示用户界面,如通過檢測window對象及其top屬性值。

原文鏈接:HTML應用安全
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.