最近專案由於有 QA 團隊檢查安全性
所以這邊紀錄一下最近專案用 Codeigniter
上一篇有紀錄到一些安全性 CSRF , SSRF , XSS 有關網頁安全小記 | 程式狂想筆記
SQL 需要注意安全性問題
首先,講一下 SQL INJECTION
假如要放 SQL 進去查詢,但是複雜的功能平常不可能用 bind 用 ?
去套
所以再用 變數串 SQL 的時候可能就會有危險的問題,但是不能用 bind
這時候需要加 escape
或 escape_str
原始碼可以參考這個CodeIgniter/DB_driver.php at 7ec458b45316b9f270e1e03de498244f71c605ea · bcit-ci/CodeIgniter$str = array_map(array(&$this, 'escape'), $str);
PHP 的 array function 的運用真的 千變萬化
首先講一下 escape 的小雷
看了一下 Code
想說這兩個功能都一樣
不過escape
接到 string 型態
外面會自動加'
單引號
雖然不知道為什麼
所以為什麼limit ?
不能用 bind
原因可能是 escape 會有問題(會變成 limit ‘2’)
所以在用的時候需要小心
XSS 小心
常常在網路上看到,通常都是用 JS 攻擊
所以需要做 XSS 過濾
當然輸入要過濾<script
>
輸出的是要做htmlspecialchar
Codeigniter 沒有現代化框架好用東西,如
但是還是有好用的工具,如 html_escape
相關程式原碼 CodeIgniter/Common.php at 07cb9fd45f94d928c0f6dcf73f702808e1e03f62 · bcit-ci/CodeIgniter
使用上除了可以塞 string 外 他還可以塞 array
會把所有內容做過濾
xss_clean()
可以過濾<script>
但是注意!!這個不是在過濾 HTML tag(ex: <img
>,<a
>)
$data = $this->security->xss_clean($data);
當然 img 也會有這個問題
如這篇 CheatSheetSeries/Cross_Site_Scripting_Prevention_Cheat_Sheet.md at master · OWASP/CheatSheetSeries
圖片也要注意 XSS 攻擊
1 | if ($this->security->xss_clean($file, TRUE) === FALSE) |
1 | $this->input->get(xxx , TRUE ); |
SSRF 安全過濾
在寫 call curl API 需要安全行確認
是不是參數是安全的
例如
1 |
|
上面 code 不能跑
這就會有 SSRF 問題
聽說 Server 端也能處理這個問題
CodeIgniter 的数据安全过滤全解析 - Just Code - ITeye 博客
深入探討 CodeIgniter Input Class 核心程式流程 | 小惡魔 - 電腦技術 - 工作筆記 - AppleBOY