當前位置:首頁 » 編程語言 » thinkphp防sql注入

thinkphp防sql注入

發布時間: 2022-10-29 19:19:39

① 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`';;//隱患:構造畸形語句進行注入;防止注入的總的原則是<<根據具體業務邏輯,對來源於用戶的值的范圍,類型和正負等進行限制和判斷>>,同時<<盡量使用THINKPHP自帶的SQL函數和寫法>>.

② thinkphp怎麼做才是安全的sql防注入

主要的sql注入來源於數據請求。比如表單的提交。攻擊者會在請求中帶上一些可執行的sql語句。達到注入的目的。

Thinkphp內置了數據過濾機制。可以有效的將一些存在風險的符號過濾處理。具體如下:

1、Thinkphp3.2版本:

使用I方法來獲取post、get等參數。例如獲取id參數。

I('get.id');
I('post.id');

2、Thinkphp5.0版本:

由於5.0版本將單字母方法取消了,取而代之的是一些語義更明確的方法名,I方法對應的是input方法。所有使用input方法來獲取post、get等參數。例如獲取id參數。

input('get.id');
input('post.id');

更多案例可以查看Thinkphp官方文檔。

③ thinkphp怎麼做才是安全的sql防注入

1:抵禦99%的攻擊方式,適用於90%的場景.

當網站不涉及復雜的用戶交互時,可以對用戶所有提交的文本進行htmlspecialchars函數處理。

在THINKPHP3.2版本中的操作步驟是:
一:在項目配置文件中添加配置: 'DEFAULT_FILTER' => 'htmlspecialchars', //默認過濾函數
二: 使用框架帶的I方法獲取來自用戶提交的數據;
例子:M('Member')->save(array('content'=>I('post.content')));這樣添加的content內容是經過htmlspecialchars處理過的.

提問:為什麼經過htmlspecialchars處理過的文本可以保證是安全的?
回答:縱觀XSS各種攻擊方式絕大多數依賴<>'"& 這幾個字元中的一個或幾個對內容進行注入攻擊。而htmlspecialchars函數的作用就是將這些字元轉換成無害的HTML 實體;
提問:為什麼有這么好的方法,而還有好多網站還是被攻擊.
回答:因為好多程序員總會粗心忘記使用這個方法,而遺漏某條數據的過濾。

2:對COOKIE進行IP綁定
cookie裡面一般有自動登錄信息和session_id,就算對cookie裡面的內容全部加了密,cookie的信息一但被別人通過XSS攻擊獲取後也一樣等同於把自己的帳號密碼給了別人。
對cookie進行IP綁定,(當然也可以獲取用戶客戶端更多的其它信息進行同時綁定)可以根據用戶的IP來判斷這個cookie是不是來原始授權用戶。

典型的應用示例:
用戶設置了自動登錄時保存自動登錄信息:
$auto=I('post.auto');//用戶設置了自動登錄
if(!empty($auto)){
cookie('auto',encrypt(serialize($data)));//將登錄信息保存到cookie,其中$data里含有加密後的帳號,密碼,和用戶的IP,這里的cookie已在全局中設置過期日期為一周
}
用戶關閉瀏覽器再次訪問網站時,進行自動登錄
if (!is_login()) {//是否未登錄狀態?
$auth=cookie('auto');
if(!empty($auth)){//是否未有自動登錄cookie?
$data=unserialize(decrypt($auth));
if(!empty($data) && !empty($data['username']) && !empty($data['password']) && !empty($data['last_login_ip'])){
$user=M('Member')->where(array('username'=>$data['username'],'password'=>$data['password']))->find();
if(!empty($user['id'])&&($user['last_login_ip']==get_client_ip())){//cookie帳號密碼是否有效?//IP來源是否相同?
login_session($user['id'], $user['username'], $data['last_login_ip']);//用戶自動登錄成功
}
}
}
}
復制代碼
優點:大多數場景下可使被XSS攻擊盜取的cookie失效。缺點:由於IP存在多台電腦共用的可能,對綁定做不到十分精細。

3:為COOKIE添加httponly配置
最新版本的thinkphp已經支持此參數。
此參數可以保證cookie只在http請求中被傳輸,而不被頁面中的腳本獲取,現市面上絕大多數瀏覽器已經支持。
復制代碼
4:HTML5值得觀注的新特性:
<iframe src="http://alibaba.com" sandbox>
為iframe的增加的sandbox屬性,可以防止不信任的Web頁面執行某些操作.相信這個方法以後會被廣泛使用。
復制代碼
5:富文本過濾
富文本過濾是,XSS攻擊最令人頭疼的話題,不僅是小網站,就連BAT這樣的巨頭也是三天兩頭的被其困擾.

④ php如何防止sql注入

PHP防止sql注入是一個比較低級的問題了,這個問題其實在我大一上學期做第一個個人博客的時候就已經關注過了,不過簡單的說一下關於PHP防注入的方式吧。


對於現在的防注入技術其實已經成熟了,對於一個站點該關心的不是防注入了,而是大規模高並發如何處理的問題,或者關於各種其他漏洞,比如現在世界上仍然有百分之80使用redis的站點存在redis漏洞,通過redis漏洞可以直接拿到機器的訪問許可權,一般來說都是直接給你種一個挖礦機器人來。

⑤ php 關於thinkphp的防sql注入跟過濾問題

防止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怎麼做才是安全的sql防注入

1.盡量少使用數組查詢條件而應該使用查詢表達式替代;
2.盡量少使用字元串查詢條件,如果不得已的情況下 使用手動參數綁定功能;
3.不要讓用戶輸入決定要查詢或者寫入的欄位;
對於敏感數據在輸出的時候使用hidden方法進行隱藏;
對於數據的寫入操作應當做好許可權檢查工作;
寫入數據嚴格使用field方法限制寫入欄位;
對於需要輸出到頁面的數據做好必要的XSS過濾;

⑦ thinkphp怎麼做才是安全的sql防注入

  1. 注入的產生一般都是對用戶輸入的參數未做任何處理直接對條件和語句進行拼裝.


    代碼舉例:

    //不安全的寫法舉例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這樣的巨頭也是三天兩頭的被其困擾.

熱點內容
h3c外網訪問內網 發布:2025-01-06 06:09:50 瀏覽:309
python已安裝的模塊 發布:2025-01-06 06:09:49 瀏覽:34
二氧化碳製冷壓縮機 發布:2025-01-06 06:09:16 瀏覽:626
硫酸和氫氧化鈉存儲 發布:2025-01-06 06:09:12 瀏覽:318
kk源碼演示 發布:2025-01-06 06:07:31 瀏覽:944
linux上傳本地文件到伺服器 發布:2025-01-06 06:01:20 瀏覽:496
c語言編譯過程講解 發布:2025-01-06 05:52:42 瀏覽:693
安卓的光遇怎麼華麗退場 發布:2025-01-06 05:50:27 瀏覽:680
騰訊雲輕量伺服器設置獨立ip 發布:2025-01-06 05:50:26 瀏覽:722
伺服器的主機地址 發布:2025-01-06 05:47:38 瀏覽:869