PHP+MySQL安全方案整理
看之前牢記一句老話:一切使用者輸入的都是不安全的。
1 不要依賴於伺服器端的magic_quotes,雖然他們預設都是開啟的(magic_quotes_gpc)
將下面兩個關閉
ini_set("magic_quotes_runtime", 0);
ini_set("magic_quotes_sybase", 0);
全部自己手工對所有變數新增magic_quotes,就是新增addslashes
程式碼如下:
function stripslashes_deep($value){
$value = is_array($value) ?
array_map('stripslashes_deep', $value) :
stripslashes($value);
return $value;
}
function strip_slashes(){
// If already slashed, strip.
//把原有的slash去掉,重新新增自己的magic_quotes
if ( get_magic_quotes_gpc() ) {
$_GET = stripslashes_deep($_GET );
$_POST = stripslashes_deep($_POST );
$_COOKIE = stripslashes_deep($_COOKIE);
$_SERVER = stripslashes_deep($_SERVER);
$_REQUEST = stripslashes_deep($_REQUEST);
}
$_GET = add_magic_quotes($_GET );
$_POST = add_magic_quotes($_POST );
$_COOKIE = add_magic_quotes($_COOKIE);
$_SERVER = add_magic_quotes($_SERVER);
$_REQUEST = add_magic_quotes($_REQUEST);
}
strip_slashes();
顯示的時候全部stripslashes還原,雖然這很麻煩,不過如果你有一個模板引擎,可以在變數賦值的時候,統一作這個事情,
例如: function assign($var, $value = '') {
if (is_array($var)) {
foreach ($var as $k => $v) {
$this->vars[$k] = stripslashes_deep($v);
}
} else {
$this->vars[$var] = stripslashes_deep($value);
}
}
這樣可以避免' " / 等符號,下面還會有說明
2 對於使用者名稱這樣的欄位,輸入時候,檢查不允許有空格,而且必須是字母數字下劃線或劃線這四種,用正則檢查
還有諸如結點名,選單名,角色名這些不需要用' " /的,一定要在錄入之前就檢查,或者用替換為空
3 所有ID為數字的變數,必須檢查是否為數字,並將變數強制轉換成數字
如果ID是前面帶0的或者字元型的,可用編碼規則對其進行檢查,例如全是數字的正則
4 對於php的mysql函式,由於天生一次只能執行一條語句,即;不會自動斷。所以無法通過追加語句實現注入,只可能通過將語句插入到變數中來起作用注入,所以對於delete ,select,update都可能有破壞作用。
例如:delete from tbl_users where user_id = 'admin' 變成 delete from tbl_users where user_id = 'admin or user_id<>'0',即在輸入欄為:admin or user_id<>'0
所以對於變數引數:
不該有空格的,空格要去掉
該位數字的,一定要轉換成數字
有編碼規則的,一定要檢查編碼規則
有長度限制的一定要加入長度限制
絕對不會有注入語句的,就篩查sql關鍵字
將一些危險字元進行替換,例如用“代替",空格用%20代替,特殊字元轉成html等等
當然用addslashes還是有明顯效果的,對於php來說,要想在變數中插入條件,必須通過'來完成,所以這一招可以徹底斷了所有企圖
5 apache,php,mysql不要以系統使用者執行
6 連線mysql不要用root
7 系統的所有錯誤資訊必須關閉或者遮蔽
8 遮蔽非主流瀏覽器的user-agent
9 記錄所有的sql操作和使用者ip,如果發現危險語句,可以立刻遮蔽該IP,例如3天
如果是使用者登入後,有危險sql注入的語句,直接刪除該使用者,同時遮蔽IP
10 對於驗證碼要可以採用使用中文,變換字串樣式,必須點選彈出等方法
11 如果還是不安全,就要像電子銀行那樣,用U盾和專用控制元件了
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1784617
相關文章
- 【整理】CSS佈局方案CSS
- 佈局方案的思路整理
- Nginx下編譯PHP+MysqlNginx編譯PHPMySql
- 優秀的開源方案整理
- PHP+MySQL 手工注入語句大全PHPMySql
- php+mysql 個人學習部落格PHPMySql
- Mac下配置PHP+MySql環境MacPHPMySql
- PHP+MYSQL留言板製作PHPMySql
- Ubuntu 安裝php+mysql 環境UbuntuPHPMySql
- 學習php+mysql的障礙PHPMySql
- PHP+MYSQL的分頁實作PHPMySql
- C# 手寫識別方案整理C#
- php+MySQL圖書管理系統(二)PHPMySql
- 兩列自適應佈局方案整理
- 大資料量處理實踐方案整理大資料
- Nginx伺服器安全加固tips整理Nginx伺服器
- 精準測試方案 [部分原始碼整理中]原始碼
- 【整理】組建MySQL叢集的幾種方案MySql
- ios安全加固 ios 加固方案iOS
- PHP+MySQL 千萬級資料處理案例(一)PHPMySql
- php+mysql 解決emoji表情符號問題PHPMySql符號
- web專案顯示亂碼解決方案整理Web
- 伺服器安全執行方案伺服器
- 網路安全人才提升方案
- 企業WIFI安全應用方案WiFi
- 原始碼安全加密解決方案原始碼加密
- 遠端安全接入解決方案
- CA的安全解決方案(轉)
- 騰訊安全釋出《資料安全解決方案白皮書》
- 雲安全解決方案|讓企業用上安全的雲
- 2022“兩會”網路安全提案整理
- 關於網路安全幾個問題的整理
- PHP+MySQL設計高效發表評論留言功能PHPMySql
- PHP+MySQL實現線上測試答題例項PHPMySql
- 利用php+mysql儲存和輸出檔案(轉)PHPMySql
- 雲資料庫安全解決方案資料庫
- OA系統安全解決方案分析
- 資料中心安全解決方案