codeigniter 安全
xss 預(yù)防
xss 意味著跨站點(diǎn)腳本。 codeigniter 帶有 xss 過濾安全性。此過濾器將阻止任何惡意 javascript 代碼或任何其他試圖劫持 cookie 并進(jìn)行惡意活動的代碼。要通過 xss 過濾器過濾數(shù)據(jù),請使用 xss_clean() 方法,如下所示。
$data = $this->security->xss_clean($data);
您應(yīng)該僅在提交數(shù)據(jù)時使用此功能。可選的第二個布爾參數(shù)也可用于檢查圖像文件是否存在 xss 攻擊。這對于文件上傳工具很有用。如果它的值為真,則表示圖像是安全的,否則不安全。
sql 注入預(yù)防
sql 注入是對數(shù)據(jù)庫查詢的攻擊。在 php 中,我們使用 mysql_real_escape_string() 函數(shù)和其他技術(shù)來防止這種情況發(fā)生,但 codeigniter 提供了內(nèi)置函數(shù)和庫來防止這種情況發(fā)生。
我們可以通過以下三種方式在 codeigniter 中防止 sql 注入:
- 轉(zhuǎn)義查詢
- 查詢出價
- 活動記錄類
轉(zhuǎn)義查詢
$username = $this--->input->post('username'); $query = 'select * from subscribers_tbl where user_name = '. $this->db->escape($email); $this->db->query($query); ?>
$this->db->e??scape() 函數(shù)自動在數(shù)據(jù)周圍添加單引號并確定數(shù)據(jù)類型,以便它只能轉(zhuǎn)義字符串?dāng)?shù)據(jù)。
查詢競價
$sql = "select * from some_table where id = ? and status = ? and author = ?"; $this--->db->query($sql, array(3, 'live', 'rick')); ?>
在上面的例子中,問號(?) 將被 query() 函數(shù)的第二個參數(shù)中的數(shù)組替換。以這種方式構(gòu)建查詢的主要優(yōu)點(diǎn)是值會自動轉(zhuǎn)義,從而產(chǎn)生安全查詢。 codeigniter 引擎會自動為您執(zhí)行此操作,因此您無需記住它。
活動記錄類
$this--->db->get_where('subscribers_tbl',array ('status'=> active','email' => 'info@arjun.net.in')); ?>
使用活動記錄,查詢語法由每個數(shù)據(jù)庫適配器生成。它還允許更安全的查詢,因為值會自動轉(zhuǎn)義。
隱藏 php 錯誤
在生產(chǎn)環(huán)境中,我們通常不希望向用戶顯示任何錯誤消息。如果為了調(diào)試目的在開發(fā)環(huán)境中啟用它是好的。這些錯誤消息可能包含一些信息,出于安全原因,我們不應(yīng)向站點(diǎn)用戶顯示這些信息。
有三個與錯誤相關(guān)的 codeigniter 文件。
php 錯誤報告級別
不同的環(huán)境需要不同級別的錯誤報告。默認(rèn)情況下,開發(fā)將顯示錯誤,但測試和實時將隱藏它們。 codeigniter 的根目錄中有一個名為 index.php 的文件,用于此目的。如果我們將零作為參數(shù)傳遞給 error_reporting() 函數(shù),那么這將隱藏所有錯誤。
數(shù)據(jù)庫錯誤
即使您關(guān)閉了 php 錯誤,mysql 錯誤仍然存??在。您可以在 application/config/database.php 中關(guān)閉此功能。將 $db 數(shù)組中的 db_debug 選項設(shè)置為 false,如下所示。
$db['default']['db_debug'] = false;
錯誤日志
另一種方法是將錯誤傳輸?shù)饺罩疚募R虼耍粫@示給網(wǎng)站上的用戶。只需在 application/cofig/config.php 文件中將 $config 數(shù)組中的 log_threshold 值設(shè)置為 1,如下所示。
$config['log_threshold'] = 1;
csrf 預(yù)防
csrf 代表跨站請求偽造。您可以通過在 application/config/config.php 文件中啟用它來防止這種攻擊,如下所示。
$config['csrf_protection'] = true;
當(dāng)您使用 form_open() 函數(shù)創(chuàng)建表單時,它會自動插入一個 csrf 作為隱藏字段。您還可以使用 get_csrf_token_name() 和 get_csrf_hash() 函數(shù)手動添加 csrf。 get_csrf_token_name() 函數(shù)將返回 csrf 的名稱, get_csrf_hash() 將返回 csrf 的哈希值。
csrf 令牌可以在每次提交時重新生成,也可以在 csrf cookie 的整個生命周期中保持不變。通過設(shè)置 true 值,配置數(shù)組中的鍵為 ‘csrf_regenerate’ 將重新生成令牌,如下所示。
$config['csrf_regenerate'] = true;
您還可以通過使用密鑰 ‘csrf_exclude_uris’ 在配置數(shù)組中進(jìn)行設(shè)置來將來自 csrf 保護(hù)的 url 列入白名單,如下所示。您也可以使用正則表達(dá)式。
$config['csrf_exclude_uris'] = array('api/person/add');
密碼處理
許多開發(fā)人員不知道如何在 web 應(yīng)用程序中處理密碼,這可能就是為什么許多黑客發(fā)現(xiàn)入侵系統(tǒng)如此容易的原因。處理密碼時應(yīng)牢記以下幾點(diǎn):
- 請勿以純文本格式存儲密碼。
- 始終對您的密碼進(jìn)行哈希處理。
- 請勿使用 base64 或類似編碼來存儲密碼。
- 請勿使用弱或損壞的哈希算法,例如 md5 或 sha1、僅使用強(qiáng)密碼散列算法,如 bcrypt,它用于 php 自己的密碼散列函數(shù)。
- 切勿以純文本格式顯示或發(fā)送密碼。
- 不要對用戶的密碼設(shè)置不必要的限制。
- CodeIgniter 教程
- CodeIgniter 安裝
- CodeIgniter 應(yīng)用程序架構(gòu)
- CodeIgniter 基本概念
- CodeIgniter 使用數(shù)據(jù)庫
- CodeIgniter 庫
- CodeIgniter 錯誤處理
- CodeIgniter 文件上傳
- CodeIgniter 發(fā)送電子郵件
- CodeIgniter 表單驗證
- CodeIgniter Flashdata
- CodeIgniter 臨時數(shù)據(jù)
- CodeIgniter Cookie管理
- CodeIgniter 常用函數(shù)
- Laravel session
- Laravel CSRF保護(hù)
- Laravel 認(rèn)證
- Laravel Artisan控制臺
- Laravel 加密
- Laravel 歷史版本記錄