Contents

Codeigniter 安全性小記

最近專案由於有 QA 團隊檢查安全性
所以這邊紀錄一下最近專案用 Codeigniter
上一篇有紀錄到一些安全性 CSRF , SSRF , XSS 有關網頁安全小記 | 程式狂想筆記

SQL 需要注意安全性問題

首先,講一下 SQL INJECTION
假如要放 SQL 進去查詢,但是複雜的功能平常不可能用 bind 用 ? 去套
所以再用 變數串 SQL 的時候可能就會有危險的問題,但是不能用 bind

這時候需要加 escapeescape_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 沒有現代化框架好用東西,如{{ var_str }}
但是還是有好用的工具,如 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
2
3
4
if ($this->security->xss_clean($file, TRUE) === FALSE)
{
        // file failed the XSS test
}
1
$this->input->get(xxx , TRUE );

SSRF 安全過濾

在寫 call curl API 需要安全行確認
是不是參數是安全的
例如

1
2
3
4
5
<?php
function callAPI($url){
    ...
    curl($url)
}

上面 code 不能跑
這就會有 SSRF 問題
聽說 Server 端也能處理這個問題

CodeIgniter 的数据安全过滤全解析 - Just Code - ITeye 博客
深入探討 CodeIgniter Input Class 核心程式流程 | 小惡魔 - 電腦技術 - 工作筆記 - AppleBOY