❶ thinkphp怎麼做才是安全的sql防注入
注入的產生一般都是對用戶輸入的參數未做任何處理直接對條件和語句進行拼裝.
代碼舉例:
//不安全的寫法舉例1
$_GET['id']=8;//希望得到的是正整數
$data=M('Member')->where('id='.$_GET['id'])->find();
$_GET['id']='8 or status=1';//隱患:構造畸形查詢條件進行注入;
//安全的替換寫法
$data=M('Member')->where(array('id'=>$_GET['id']))->find();//使用數組方式將自動使用框架自帶的欄位類型檢測防止注入
$data=M('Member')->where(array('id'=>(int)$_GET['id']))->find();//類型約束
$data=M('Member')->where('id='.intval($_GET['id']))->find();//類型轉換
$data=M('Member')->where(array('id'=>I('get.id','','intval')))->find();//本人習慣寫法
$data=M('Member')->where(array('id'=>':id'))->bind(':id',I('get.id'))->select();//PDO驅動可以使用參數綁定
$data=M('Member')->where("id=%d",array($_GET['id']))->find();//預處理機制
//不安全的寫法舉例2
$_GET['id']=8;//希望得到的是正整數
$data=M()->query('SELECT * FROM `member` WHERE id='.$_GET['id']);//執行的SQL語句
$_GET['id']='8 UNION SELECT * FROM `member`';;//隱患:構造畸形語句進行注入;
2.防止注入的總的原則是<<根據具體業務邏輯,對來源於用戶的值的范圍,類型和正負等進行限制和判斷>>,同時<<盡量使用THINKPHP自帶的SQL函數和寫法>>.
3.在THINKPHP3.2版本中的操作步驟是:
一:在項目配置文件中添加配置: 'DEFAULT_FILTER' => 'htmlspecialchars', //默認過濾函數
二: 使用框架帶的I方法獲取來自用戶提交的數據;
例子:M('Member')->save(array('content'=>I('post.content')));這樣添加的content內容是經過htmlspecialchars處理過的.
4.為COOKIE添加httponly配置
5.最新版本的thinkphp已經支持此參數。
9.富文本過濾
富文本過濾是,XSS攻擊最令人頭疼的話題,不僅是小網站,就連BAT這樣的巨頭也是三天兩頭的被其困擾.
❷ ThinkPHP控制器參數綁定中,參數已用I函數過濾了嗎
默認帶的參數就是復需要驗證制的表單名稱,所以你上面的寫法應該是沒問題的 但是需要注意的是:checkidcard($sfzh)函數的返回值應改為true或者false,分別表示驗證通過或失敗 function checkidcard($sfzh){ if(!preg_match('// 驗證正則 ..', $sfzh).
❸ thinkphp如何過濾名字重復的記錄
example.對欄位進行去重回
$index = $select->distinct ( true )->where ( 'parent_id=0' )->field ( 'index' )->select ();
SELECT TOP 3
degree ,
COUNT(1) AS 人數答
FROM
Student
GROUP BY
degree
ORDER BY
degree DESC
❹ php 關於thinkphp的防sql注入跟過濾問題
防止注入
opensns
對於WEB應用來說,SQL注入攻擊無疑是首要防範的安全問題,系統底層對於數據安全方面本身進行了很多的處理和相應的防範機制,例如:
$User = M("User"); // 實例化User對象
$User->find($_GET["id"]);
即便用戶輸入了一些惡意的id參數,系統也會強制轉換成整型,避免惡意注入。這是因為,系統會對數據進行強制的數據類型檢測,並且對數據來源進行數據格式轉換。而且,對於字元串類型的數據,ThinkPHP都會進行escape_string處理(real_escape_string,mysql_escape_string)。
通常的安全隱患在於你的查詢條件使用了字元串參數,然後其中一些變數又依賴由客戶端的用戶輸入,要有效的防止SQL注入問題,我們建議:
查詢條件盡量使用數組方式,這是更為安全的方式;
如果不得已必須使用字元串查詢條件,使用預處理機制(3.1版本新增特性);
開啟數據欄位類型驗證,可以對數值數據類型做強制轉換;(3.1版本開始已經強制進行欄位類型驗證了)
使用自動驗證和自動完成機制進行針對應用的自定義過濾;
欄位類型檢查、自動驗證和自動完成機制我們在相關部分已經有詳細的描述。
查詢條件預處理
where方法使用字元串條件的時候,支持預處理(安全過濾),並支持兩種方式傳入預處理參數,例如:
$Model->where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))->select();
或者
$Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();
模型的query和execute方法 同樣支持預處理機制,例如:
$model->query('select * from user where id=%d and status=%d',$id,$status);
或者
$model->query('select * from user where id=%d and status=%d',array($id,$status));
execute方法用法同query方法。
❺ Thinkphp 過濾HTML標簽
經過截獲http的請求數據發現轉義是發生在thinkphp接收html文本之前由瀏覽器或在線編輯版器自動權轉義的。
對於使用create方法時可以在Model文件夾中定義模型類,在模型類中定義(content是你提交的欄位):
protected $_auto = array(
array('content', 'htmlspecialchars_decode', self::MODEL_BOTH, 'function'),
);
然後用D("模型名")->create();
如果是用I函數接收的可以改為$content = I('content', '', 'htmlspecialchars_decode');
❻ thinkphp為什麼過濾style標簽
xss過濾主要是復應對傳值的時候制,防止惡意攻擊者往Web頁面里插入惡意html代碼。
這種編輯器入庫的根本不需要用xss過濾啊,可以用mysql_escape_string過濾一下入庫,然後展示的時候用htmlspecialchars原型輸出就可以了。
❼ 經過相應php過濾器過濾後的數據是不是足夠安全 可以直接存入資料庫啊
還要過濾一下SQL注入。判斷一下E-mail的長度,不能超過資料庫欄位設定的長度..
❽ 官方求助,thinkphp如何防注入
where方法使用字元串條件的時候,支持預處理(安全過濾),並支持兩種方式傳入預處理參數,版例如:權
$Model->where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))->select();
// 或者
$Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();
模型的query和execute方法 同樣支持預處理機制,例如:
$model->query('select * from user where id=%d and status=%d',$id,$status);
//或者
$model->query('select * from user where id=%d and status=%d',array($id,$status));
execute方法用法同query方法。
❾ 求救,thinkphp開發時注意哪些安全性問題
where方法使用字元串條件的時候,支持預處理(安全過濾),並支持兩種方版式傳入預處理參權數,例如:
$Model->where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))->select();
// 或者
$Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();
模型的query和execute方法 同樣支持預處理機制,例如:
$model->query('select * from user where id=%d and status=%d',$id,$status);
//或者
$model->query('select * from user where id=%d and status=%d',array($id,$status));
execute方法用法同query方法。
❿ php表單安全過濾究竟要怎麼做
首先在客戶端通過JS進行初步數據過來是有效的手段,但是請注意,一切在客戶內端進行的驗容證都是非安全的,都是可以繞過的
然後是在代碼層進行數據過濾,例如php有些函數可以用來進行一些簡單的過濾操作:
strip_tags 可以去掉文本內容中的所有html標簽
htmlspecialchars 可以對文本內容中的html標簽進行轉義
addslashes 可以對內容中的特殊符號進行轉義
這些函數可以進行初步過濾,然後具體的內容就需要自己編寫相應的規則了,例如清除js代碼或者其他的敏感詞彙,需要自己編寫對應的正則進行替換
最後則是在執行sql時進行一些安全操作,如pdo的預處理等