⑴ php sql注入過濾
用參數化傳入最簡單。
寫函數過濾最方便。
⑵ php如何防止sql注入
PHP防止sql注入是一個比較低級的問題了,這個問題其實在我大一上學期做第一個個人博客的時候就已經關注過了,不過簡單的說一下關於PHP防注入的方式吧。
對於現在的防注入技術其實已經成熟了,對於一個站點該關心的不是防注入了,而是大規模高並發如何處理的問題,或者關於各種其他漏洞,比如現在世界上仍然有百分之80使用redis的站點存在redis漏洞,通過redis漏洞可以直接拿到機器的訪問許可權,一般來說都是直接給你種一個挖礦機器人來。
⑶ PHP 這樣過濾SQL注入行嗎
discuz里就有這么一個函數,可以處理字元串或數組
function saddslashes($string) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = saddslashes($val);
}
} else {
$string = addslashes($string);
}
return $string;
}
可以把$_GET里所有參數都處理。關於資源佔用,倒沒怎麼注意過,平時用來處理後台數據提交還是比較好用的。
⑷ 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方法。
⑸ php過濾sql注入,新手
我在PHP4環境下寫了一個防SQL注入的代碼,經過實際使用在PHP5下也兼容,歡迎大家使用修改,使用。
代碼如下:
<?php
/*
sqlin 防注入類
*/
class sqlin
{
//dowith_sql($value)
function dowith_sql($str)
{
$str = str_replace("and","",$str);
$str = str_replace("execute","",$str);
$str = str_replace("update","",$str);
$str = str_replace("count","",$str);
$str = str_replace("chr","",$str);
$str = str_replace("mid","",$str);
$str = str_replace("master","",$str);
$str = str_replace("truncate","",$str);
$str = str_replace("char","",$str);
$str = str_replace("declare","",$str);
$str = str_replace("select","",$str);
$str = str_replace("create","",$str);
$str = str_replace("delete","",$str);
$str = str_replace("insert","",$str);
$str = str_replace("'","",$str);
$str = str_replace(""","",$str);
$str = str_replace(" ","",$str);
$str = str_replace("or","",$str);
$str = str_replace("=","",$str);
$str = str_replace("%20","",$str);
//echo $str;
return $str;
}
//aticle()防SQL注入函數
function sqlin()
{
foreach ($_GET as $key=>$value)
{
$_GET[$key]=$this->dowith_sql($value);
}
foreach ($_POST as $key=>$value)
{
$_POST[$key]=$this->dowith_sql($value);
}
}
}
$dbsql=new sqlin();
?>
===================================================================================
使用方式:
將以上代碼復制新建一個sqlin.php的文件,然後包含在有GET或者POST數據接收的頁面
原理:
將所有的SQL關鍵字替換為空.
⑹ 如何在PHP里防止SQL注入
過濾一些常見的資料庫操作關鍵字,
select ,insert,update,delete,and,*等或通過系統函數addslashes對內容進行過濾
php配置文件中register_globals=off;設置為關閉狀態.(作用將注冊全局變數關閉);如接收POST表單的值使用$_POST['user'],假設設置為ON的話$user才接收值
sql語句書寫的時候盡量不要省略小引號(tab上面那個)和單引號
提高資料庫命名技巧,對於一些重要的欄位根據程序的特點命名,使之不易被猜中
對於常的方法加以封裝,避免直接暴漏SQL語句
開啟PHP安全模式safe_mode=on
打開magic_quotes_gpc來防止SQL注入,默認為關閉,開啟後自動把用戶提交sql查詢語句進行轉換把"'"轉換成"\'"
控制錯誤信息輸出,關閉錯誤信息提示,將錯誤信息寫到系統日誌
使用MYSQLI或PDO預處理
⑺ 求php防止被sql 注入攻擊的過濾用戶輸入內容的函數
functionclean($v){
//判斷magic_quotes_gpc是否為打開
if(!get_magic_quotes_gpc()){
//進行magic_quotes_gpc沒有打開的情況對提交數據的過濾
$v=addslashes($v);
}
//把'_'過濾掉
$v=str_replace("_","\_",$v);
//把'%'過濾掉
$v=str_replace("%","\%",$v);
//把'*'過濾掉
$v=str_replace("*","*",$v);
//回車轉換
$v=nl2br($v);
//html標記轉換
$v=htmlspecialchars($v);
return$v;
}
如果需要,還可以屏蔽一下危險字元,例如insert, update, delete等
//將update去掉
$v=str_replace("update","",$v);
最後,在拼裝sql語句時,用戶輸入的東西,全括在單引號內
⑻ php怎樣過濾非法字元防止sql注入
htmlspecialchars($_POST['欄位']),用這個函數就可以將一些特殊字元進行過濾轉義。你可以去看看這個函數的說明。
⑼ PHP 防sql注入 過濾信息的方法
最好的就是mysql_real_escape_string()了,不會出問題
⑽ 求問,php+mysql,對請求參數進行哪些過濾能完全防止sql注入,轉義有效么
如果您通過網頁獲取用戶輸入的數據並將其插入一個MySQL資料庫,那麼就有可能發生SQL注入安全的問題。
本章節將為大家介紹如何防止SQL注入,並通過腳本來過濾SQL中注入的字元。