1. 程式人生 > >Web安全編程

Web安全編程

utility 校驗和 結果 服務 bat 如果 編譯 內容 batis

姓名:鄧勇 班級:軟件151

SQL註入攻擊:
最容易由程序員的編程疏忽產生的漏洞是SQL註入和XSS,SQL註入的危害嚴重的情況是泄漏整個數據庫的信息,後果不堪設想,XSS的後果嚴重的情況使用戶信息泄漏。以MyBatis為例如何防止SQL註入,如下一條查詢語句:
SELECT * from answer a where a.username=#{username}
還可以換個方法寫:
SELECT * from user u where u.username=‘${username}‘
在MyBatis裏對SQL的處理分為兩種,一種是DynamicSqlSource,用於動態的拼接SQL,還有一種是RawSqlSource,靜態的SQL(已經預編譯)。
MyBatis對#{}的處理就是靜態預編譯,將SQL參數化,假設用戶傳的username我們沒有過濾,直接用,如果輸入的是“ vince‘ or ‘1‘ == ‘1 ”,預計編譯的處理會對特定的字符做轉義,數據庫會去匹配整個字符串,但${}的處理則是拼接成一個新的SQL,拼接後的SQL如下:
SELECT * from user u where u.username=‘vince‘ or ‘1‘ == ‘1‘
是不是結果就不是我們預期的了,嚴重的情況會使整個數據庫被攻破,防止SQL註入的方法有很多,對用戶輸入的參數進行嚴格的校驗同樣也能避免此類問題,不過數據庫在設計之初已經幫我們想好了處理方案,就是SQL的預編譯,不僅提高執行效率,而且能夠防止SQL註入。

跨站腳本攻擊:
跨站腳本攻擊也是一個開發人員引起的軟件漏洞,開發人員沒有對展示的文本進行轉義處理,導致用戶上傳的惡意腳本在瀏覽器中執行了,這也叫代碼註入,開發人員也可以通過嚴格的參數校驗和過濾進行避免,也可以利用工具處理,例如Freemarker模板框架裏的freemarker.template.utility.StringUtil.XMLEncNA(String),
用戶輸入的內容是 <script>alert(‘hel‘);</script> 處理後變成了 &lt;script&gt;alert(‘hel‘);&lt;/script&gt; 這樣瀏覽器就不會執行這段腳本,但最終在瀏覽器上還是展示成 <script>alert(‘hel‘);</script> ,試想一下,如果這裏不是alert一個字符串,而是引入一個外部的JS文件,這個文件裏的操作是獲取用戶的Cookie,Cookie裏可能包含了某個網站的有效會話SessionID,然後將獲取到的數據發到某個郵箱裏,惡意的人可以用這個會話登錄這個網站,後果可想而知了。
尤其是在有文件上傳,用戶輸入框的地方,開發人員一定要有嚴格的防範意識,不要依賴客戶端JS上的驗證,任何用戶輸入的校驗都要驗證兩次,至少服務器要校驗一次。
有一個組織www.owasp.org/ 在web安全方面做的很好,公益性的,貢獻了很多資料值得我們開發人員學習。
2013年排名前10的安全漏洞
安全測試指南
安全編碼規範
其他安全註意事項:
還有很多容易引起安全漏洞的不良編碼習慣,例如對密碼的不重視,在軟件中留SQL後門等等,當然不是所有漏洞都是開發人員引起的

Web安全編程