常見的安全問題
- SQL注入
- XSS(跨站腳本攻擊,Cross-Site Scripting)
- CSRF(跨站請求僞造,Cross-site- request forgery)
SQL注入與防範
- 通過構造特殊的輸入參數傳入Web應用,導致後端執行了惡意的SQL
- 通常由於程序員未對輸入進行過濾,直接動態拼接SQL產生
- 可以使用開源工具sqlmp,SQLninja
防範SQL注入
web安全原則一大原則:永遠不要相信用戶的任何輸入
- 對輸入參數做好檢查(類型和範圍);過濾和轉義特殊字符
- 不要直接拼接sql,使用ORM可以大大降低sql注入風險
- 數據庫底層:做好權限管理配置;不要明文存儲敏感信息
什麼是XSS
- 惡意用戶將代碼植入到提供給其他用戶使用的頁面中,未經轉義的惡意代碼輸出到其他用戶的瀏覽器使用
- 用戶瀏覽頁面的時候嵌入頁面的腳本(js)就會被執行,攻擊用戶
XSS危害
xss可以利用js實現很多危害巨大的操作
- 盜用用戶cookie,獲取用戶敏感信息
- 利用用戶私人賬號執行一些違法的操作,比如盜取個人或者商業資料,執行一些隱私操作
- 甚至可以在一些訪問量很大的網站上實現DDoS攻擊
防範XSS危害
不要相信用戶的輸入
- 過濾(輸入和參數)。對敏感標籤
什麼CRSF
- 利用網站已認證的用戶的權限去執行未授權的命令的一種惡意攻擊
- 攻擊者會盜用你的登錄信息,以你的身份去模擬發送請求
- web身份認證機制只能識別一個請求是否來自某個用戶的瀏覽器,但是無法保證請求是否用戶自己或者批准發送的
CSRF產生條件
- 受害者已經登錄到了目標網站並且沒有退出(保持登錄狀態)
- 受害者訪問了攻擊者發佈的鏈接或者表單
- 二者必須缺一不可
如何防範CSRF
- 令牌同步(Synchonizer token pattern,簡稱STP);在用戶請求的表單中嵌入隱藏的csrf_token,服務端驗證其是否與cookie中的一致(基於同源策略其他網站是無法獲取cookie中的csrf_token)
- 如果是js提交需要先從cookie獲取csrf_token作爲X-CSRFtoken請求頭提交
- 其他:檢測來源HTTP REFER(容易被僞造);驗證碼的方式(安全但是繁瑣)