安全程式設計能夠體現乙個程式設計師是否合格,什麼是安全程式設計,就是在開發階段避免系統漏洞,根據烏雲漏洞平台的統計,2014排行前10的安全問題如下:
sql注入攻擊:
最容易由程式設計師的程式設計疏忽產生的漏洞是sql注入和xss,sql注入的危害嚴重的情況是洩漏整個資料庫的資訊,後果不堪設想,xss的後果嚴重的情況使使用者資訊洩漏。以mybatis為例如何防止sql注入,如下一條查詢語句:
select * from answer a where a.username=#
還可以換個方法寫:
select * from user u where u.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),
使用者輸入的內容是處理後變成了這樣瀏覽器就不會執行這段指令碼,但最終在瀏覽器上還是展示成,試想一下,如果這裡不是alert乙個字串,而是引入乙個外部的js檔案,這個檔案裡的操作是獲取使用者的cookie,cookie裡可能包含了某個**的有效會話sessionid,然後將獲取到的資料發到某個郵箱裡,惡意的人可以用這個會話登入這個**,後果可想而知了。
尤其是在有檔案上傳,使用者輸入框的地方,開發人員一定要有嚴格的防範意識,不要依賴客戶端js上的驗證,任何使用者輸入的校驗都要驗證兩次,至少伺服器要校驗一次。
有乙個組織www.owasp.org/ 在web安全方面做的很好,公益性的,貢獻了很多資料值得我們開發人員學習。
2023年排名前10的安全漏洞
安全測試指南
安全編碼規範
其他安全注意事項:
還有很多容易引起安全漏洞的不良編碼習慣,例如對密碼的不重視,在軟體中留sql後門等等,當然不是所有漏洞都是開發人員引起的
WEB安全程式設計
近年來web安全越來越受到企業的重視,作為程式設計師,我們做程式安全的第一責任人,你對web安全程式設計又有多少了解呢?其實了解常見的幾個安全程式設計方法就會讓大多數黑客無功而返,下面會一一枚舉 1 sql注入 sql injection sql注入是指攻擊者利用拼接的sql引數,進行的一些非法操作...
Web安全 Web通訊
協議 url http 統一資源定位符 uniform resource locator 支援多種協議 http ftp 定位伺服器的資源 schema host port path query string anchor schema 底層協議 如 http https ftp host 伺服器的...
安全測試,web安全
web分為好幾層,一圖勝千言 完全沒有基礎我該從哪下手?完全沒有基礎學習 web 安全是件比較難的事情,所以我給出的最小的方案和最少的建議。工具 先用 awvs 掃幾個測試 大體了解一下 把掃到的漏洞復現,了解怎麼利用,主要了解 xsssql 注入 遠端 執行 開發 書籍 細說 php 實踐 使用 ...