比較常見的 web 漏洞有:SQL注入、XSS跨站站點腳本、CSRF跨站請求偽造等。由于所在團隊或者公司均有嚴格隔離的內網環境和基礎運維團隊,對弱口令漏洞、敏感信息泄露漏洞等很少涉及。
先簡單的聊一聊 SQL 注入,這個基本上是最常見的 web 漏洞了。SQL注入攻擊(SQL Injection),簡稱注入攻擊、SQL注入,被廣泛用于非法獲取網站控制權,是發生在應用程序的數據庫層上的安全漏洞。在設計程序,忽略了對輸入字符串中夾帶的SQL指令的檢查,被數據庫誤認為是正常的SQL指令而運行,從而使數據庫受到攻擊,可能導致數據被竊取、更改、刪除,以及進一步導致網站被嵌入惡意代碼、被植入后門程序等危害。比如執行下述 SQL 時
String sql = "select * from user where username = '" +uname "' and password = '" + pwd + "'";
# 輸入用戶名為: tom' or '1=1 , 密碼不輸入或者隨便輸入, SQL如下:
select * from user from username = 'tom' or '1=1' and password = '你輸入的密碼'
有了or 自然只要username = 'tom' 成立, 后面的也不會起作用,這個sql基本上是很常見的比較典型的 SQL 注入問題,在直接使用 JDBC進行 SQL 拼接操作時,很容易引發這種情況。通常情況下,SQL注入的位置包括:
(1)表單提交,主要是POST請求,也包括GET請求;
(2)URL參數提交,主要為GET請求參數;
(3)Cookie參數提交。
將JDBC代碼中的Statement 換成 PreparedStatement ,使用預編譯機制進行 SQL 注入預防,最普遍的是選用 Mybatis 或 Hibernate 等持久化框架,避免 JDBC 的直接使用,并在 Mybatis 的 SQL 中使用 '