php過濾sql注入
一、 注入式攻擊的類型
可能存在許多不同類型的攻擊動機,但是乍看上去,似乎存在更多的類型。這是非常真實的-如果惡意用戶發現了一個能夠執行多個查詢的辦法的話。本文後面,我們會對此作詳細討論。
如
果你的腳本正在執行一個SELECT指令,那麼,攻擊者可以強迫顯示一個表格中的每一行記錄-通過把一個例如"1=1"這樣的條件注入到WHERE子句中,如下所示(其中,注入部分以粗體顯示):
SELECT * FROM wines WHERE variety = 』lagrein』 OR 1=1;』
正如我們在前面所討論的,這本身可能是很有用的信息,因為它揭示了該表格的一般結構(這是一條普通的記錄所不能實現的),以及潛在地顯示包含機密信息的記錄。
一條更新指令潛在地具有更直接的威脅。通過把其它屬性放到SET子句中,一名攻擊者可以修改當前被更新的記錄中的任何欄位,例如下面的例子(其中,注入部分以粗體顯示):
UPDATE wines SET type=』red』,』vintage』=』9999』 WHERE variety = 』lagrein』
通過把一個例如1=1這樣的恆真條件添加到一條更新指令的WHERE子句中,這種修改范圍可以擴展到每一條記錄,例如下面的例子(其中,注入部分以粗體顯示):
UPDATE wines SET type=』red』,』vintage』=』9999 WHERE variety = 』lagrein』 OR 1=1;』
最危險的指令可能是DELETE-這是不難想像的。其注入技術與我們已經看到的相同-通過修改WHERE子句來擴展受影響的記錄的范圍,例如下面的例子(其中,注入部分以粗體顯示):
DELETE FROM wines WHERE variety = 』lagrein』 OR 1=1;』
二、 多個查詢注入
多個查詢注入將會加劇一個攻擊者可能引起的潛在的損壞-通過允許多條破壞性指令包括在一個查詢中。在使用MySQL資料庫時, 攻擊者通過把一個出乎意料之外的終止符插入到查詢中即可很容易實現這一點-此時一個注入的引號(單引號或雙引號)標記期望變數的結尾;然後使用一個分號終 止該指令。現在,一個另外的攻擊指令可能被添加到現在終止的原始指令的結尾。最終的破壞性查詢可能看起來如下所示:
SELECT * FROM wines WHERE variety = 』lagrein』;
GRANT ALL ON *.* TO 』BadGuy@%』 IDENTIFIED BY 』gotcha』;』
這個注入將創建一個新的用戶BadGuy並賦予其網路特權(在所有的表格上具有所有的特權);其中,還有一個"不祥"的口令被加入到這個簡單的SELECT語句中。如果你遵循我們在以前文章中的建議-嚴格限制該過程用戶的特權,那麼,這應該無法工作,因為web伺服器守護程序不再擁有你撤回的GRANT特權。但是從理論上講,這樣的一個攻擊可能給予BadGuy自由權力來實現他對你的資料庫的任何操作。
至 於這樣的一個多查詢是否會被MySQL伺服器處理,結論並不唯一。這其中的一些原因可能是由於不同版本的MySQL所致,但是大多數情況卻是由於多查詢存 在的方式所致。MySQL的監視程序完全允許這樣的一個查詢。常用的MySQL GUI-phpMyAdmin,在最終查詢之前會復制出以前所有的內容,並且僅僅這樣做。
但是,大多數的在一個注入上下文中的多查詢都是由PHP的mysql 擴展負責管理的。幸好,默認情況下,它是不允許在一個查詢中執行多個指令的;試圖執行兩個指令(例如上面所示的注入)將會簡單地導致失敗-不設置任何錯 誤,並且沒有生成任何輸出信息。在這種情況下,盡管PHP也只是"規規矩矩"地實現其預設行為,但是確實能夠保護你免於大多數簡單的注入式攻擊。
PHP5中的新的mysqli擴展(參考http://php.net/mysqli),就象mysql一樣,內在地也不支持多個查詢,不過卻提供了一個mysqli_multi_query()函數以支持你實現多查詢-如果你確實想這樣做的話。
然而,對於SQLite-與PHP5綁定到一起的可嵌入的SQL資料庫引擎(參考http://sqlite.org/和http://php.net/sqlite) 情況更為可怕,由於其易於使用而吸引了大量用戶的關注。在有些情況下,SQLite預設地允許這樣的多指令查詢,因為該資料庫可以優化批查詢,特別是非常 有效的批INSERT語句處理。然而,如果查詢的結果為你的腳本所使用的話(例如在使用一個SELECT語句檢索記錄的情況下), sqlite_query()函數卻不會允許執行多個查詢。三、 INVISION Power BOARD SQL注入脆弱性
Invision Power Board是一個著名的論壇系統。2005年五月6號,在登錄代碼中發現了一處SQL注入脆弱性。其發現
者為GulfTech Security Research的James Bercegay。
這個登錄查詢如下所示:
$DB->query("SELECT * FROM ibf_members WHERE id=$mid AND password=』$pid』");
其中,成員ID變數$mid和口令ID變數$pid被使用下面兩行代碼從my_cookie()函數中檢索出:
$mid = intval($std->my_getcookie(』member_id』));
$pid = $std->my_getcookie(』pass_hash』);
在此,my_cookie()函數使用下列語句從cookie中檢索要求的變數:
return urldecode($_COOKIE[$ibforums->vars[』cookie_id』].$name]);
【注意】從該cookie返回的值根本沒有被處理。盡管$mid在使用於查詢之前被強制轉換成一個整數,但是$pid卻保持不變。因此,它很容易遭受我們前面所討論的注入類型的攻擊。
因此,通過以如下方式修改my_cookie()函數,這種脆弱性就會暴露出來:
if ( ! in_array( $name,array(』topicsread』, 』forum_read』,』collapseprefs』) ) )
{
return $this->
clean_value(urldecode($_COOKIE[$ibforums->vars[』cookie_id』].$name]));
else
{
return urldecode($_COOKIE[$ibforums->vars[』cookie_id』].$name]);
}
經過這樣的改正之後,其中的關鍵變數在"通過"全局clean_value()函數後被返回,而其它變數卻未進行檢查。
現 在,既然我們大致了解了什麼是SQL注入,它的注入原理以及這種注入的脆弱程度,那麼接下來,讓我們探討如何有效地預防它。幸好,PHP為我們提供了豐富 的資源,因此我們有充分的信心預言,一個經仔細地徹底地使用我們所推薦的技術構建的應用程序將會從你的腳本中根本上消除任何可能性的SQL注入-通過在它 可能造成任何損壞之前"清理"你的用戶的數據來實現。
四、 界定你的查詢中的每一個值
我們推薦,你確保界定了你的查詢中的每一個值。字元串值首當其沖,以及那些你通常期望應該使用"單"(而不是"雙")引號的內容。一方面,如果你使用雙引 號來允許PHP在字元串內的變數替代,這樣可以使得輸入查詢更為容易些;另一方面,這(無可否認,只是極少量地)也會減少以後PHP代碼的分析工作。
下面,讓我們使用我們一開始使用的那個非注入式查詢來說明這個問題:
SELECT * FROM wines WHERE variety = 』lagrein』
或以PHP語句表達為:
$query = "SELECT * FROM wines WHERE variety = 』$variety』";
從技術上講,引號對於數字值來說是不需要使用的。但是,如果你並不介意用引號把例如葡萄酒這樣的一個域相應的一個值括起來並且如果你的用戶把一個空值輸入到你的表單中的話,那麼,你會看到一個類似下面的查詢:
SELECT * FROM wines WHERE vintage =
當然,這個查詢從語法上講是無效的;但是,下面的語法卻是有效的:
SELECT * FROM wines WHERE vintage = 』』
第二個查詢將(大概)不會返回任何果,但是至少它不會返回一個錯誤消息。
五、 檢查用戶提交的值的類型
從前面的討論中我們看到,迄今為止,SQL注入的主要來源往往出在一個意料之外的表單入口上。然而,當你經由一個表單向用戶提供機會提交某些值時,你應該有相當的優勢來確
定 你想取得什麼樣的輸入內容-這可以使得我們比較容易地檢查用戶入口的有效性。在以前的文章中,我們已經討論過這樣的校驗問題;所以,在此,我們僅簡單地總 結當時我們討論的要點。如果你正在期望一個數字,那麼你可以使用下面這些技術之一來確保你得到的真正是一個數字類型:
㈡ 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注入漏洞有哪些函數
Version:0.9
Starthtml:-1
EndHTML:-1
StartFragment:0000000111
EndFragment:0000022042
/**
* 檢查數據
* @param $args
* @return mixed
*/
function check_data($args)
{
$args_arr=array(
'xss'=>"(EXTRACTVALUE|EXISTS|UPDATEXML)\\b.+?(select|concat)|[\\'\\\"\\;\\*\\<\\>].*\\bon[a-zA-Z]{3,15}[\\s\\r\\n\\v\\f]*\\=|\\b(?:expression)\\(|\\<script[\\s\\\\\\/]|\\<\\!\\[cdata\\[|\\b(?:eval|alert|prompt|msgbox)\\s*\\(|url\\((?:\\#|data|javascript)",
'sql'=>"(EXTRACTVALUE|EXISTS|UPDATEXML)\\b.+?(select|concat)|[^\\{\\s]{1}(\\s|\\b)+(?:select\\b|update\\b|insert(?:(\\/\\*.*?\\*\\/)|(\\s)|(\\+))+into\\b).+?(?:from\\b|set\\b)|[^\\{\\s]{1}(\\s|\\b)+(?:create|delete|drop|truncate|rename|desc)(?:(\\/\\*.*?\\*\\/)|(\\s)|(\\+))+(?:table\\b|from\\b|database\\b)|into(?:(\\/\\*.*?\\*\\/)|\\s|\\+)+(?:mp|out)file\\b|\\bsleep\\([\\s]*[\\d]+[\\s]*\\)|benchmark\\(([^\\,]*)\\,([^\\,]*)\\)|(?:declare|set|select)\\b.*@|union\\b.*(?:select|all)\\b|(?:select|update|insert|create|delete|drop|grant|truncate|rename|exec|desc|from|table|database|set|where)\\b.*(charset|ascii|bin|char|uncompress|concat|concat_ws|conv|export_set|hex|instr|left|load_file|locate|mid|sub|substring|oct|reverse|right|unhex)\\(|(?:master\\.\\.sysdatabases|msysaccessobjects|msysqueries|sysmoles|mysql\\.db|sys\\.database_name|information_schema\\.|sysobjects|sp_makewebtask|xp_cmdshell|sp_oamethod|sp_addextendedproc|sp_oacreate|xp_regread|sys\\.dbms_export_extension)",
'other'=>"\\.\\.[\\\\\\/].*\\%00([^0-9a-fA-F]|$)|%00[\\'\\\"\\.]"
);
foreach($args_arr as $key=>$value)
{
if (preg_match("/".$value."/is",$args) == 1)
{
//W_log("<br>IP: ".$_SERVER["REMOTE_ADDR"]."<br>時間: ".strftime("%Y-%m-%d %H:%M:%S")."<br>頁面:".$_SERVER["PHP_SELF"]."<br>提交方式: ".$_SERVER["REQUEST_METHOD"]."<br>提交數據: ".$str);
//print "您的提交帶有不合法參數,謝謝合作";
api_inc::error("您的提交帶有不合法參數,謝謝合作!");
exit();
}
}
return $args;
}
㈣ PHP如何防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注入
htmlspecialchars($_POST['欄位']),用這個函數就可以將一些特殊字元進行過濾轉義。你可以去看看這個函數的說明。
㈦ 如何在PHP中阻止SQL注入
使用預准備語句和參數化查詢。這些是由資料庫伺服器與任何參數分開發送和解析的SQL語句。這樣攻擊者就無法注入惡意SQL。清渭技術小站---(qingwei.tech)
你基本上有兩個選擇來實現這個目標:
使用PDO(適用於任何支持的資料庫驅動程序):
$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
$stmt->execute(array('name' => $name));
foreach ($stmt as $row) {
// do something with $row
}
使用MySQLi(用於MySQL):
$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
$stmt->bind_param('s', $name); // 's' specifies the variable type => 'string'
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// do something with $row
}
如果您要連接到MySQL以外的資料庫,則可以參考特定於驅動程序的第二個選項(例如pg_prepare(),pg_execute()對於PostgreSQL)。PDO是通用選項。
正確設置連接
請注意,在使用PDO訪問MySQL資料庫時,默認情況下不使用實際准備好的語句。要解決此問題,您必須禁用預准備語句的模擬。使用PDO創建連接的示例是:
$dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass');
// from blog: qingwei.tech
$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
在上面的例子中,錯誤模式並不是絕對必要的,但建議添加它。這樣,Fatal Error當出現問題時,腳本不會停止。並且它為開發人員提供了catch任何thrown為PDOExceptions的錯誤的機會。
什麼是強制性的,但是,是第一setAttribute()線,它告訴PDO禁用模擬預處理語句和使用真正准備好的語句。這可以確保PHP在將語句和值發送到MySQL伺服器之前不會解析它(使攻擊者可能無法注入惡意SQL)。
雖然您可以charset在構造函數的選項中進行設置,但重要的是要注意PHP的舊版本(<5.3.6)默認忽略 DSN中的charset參數。
說明 清渭技術小站---(qingwei.tech)
會發生什麼是您傳遞給的SQL語句prepare由資料庫伺服器解析和編譯。通過指定參數(如上例中的a ?或命名參數:name),您可以告訴資料庫引擎要過濾的位置。然後,當您調用時execute,預准備語句將與您指定的參數值組合。
這里重要的是參數值與編譯語句結合,而不是SQL字元串。SQL注入通過在創建SQL以發送到資料庫時欺騙腳本來包含惡意字元串。因此,通過從參數中單獨發送實際SQL,可以限制最終出現您不想要的內容的風險。使用預准備語句時發送的任何參數都將被視為字元串(盡管資料庫引擎可能會進行一些優化,因此參數最終也可能作為數字)。在上面的示例中,如果$name變數包含'Sarah'; DELETE FROM employees結果,那麼只需要搜索字元串"'Sarah'; DELETE FROM employees",您就不會得到一個空表。
使用預准備語句的另一個好處是,如果在同一個會話中多次執行相同的語句,它只會被解析和編譯一次,從而為您帶來一些速度提升。
如果你問過如何為插入操作,這是一個例子(使用PDO):
$preparedStatement = $db->prepare('INSERT INTO table (column) VALUES (:column)');
$preparedStatement->execute(array('column' => $unsafeValue));
// from blog: qingwei.tech
准備好的語句可以用於動態查詢嗎?--from 清渭技術小站
雖然您仍然可以為查詢參數使用預准備語句,但動態查詢本身的結構無法進行參數化,並且某些查詢功能無法進行參數化。清渭技術小站---(qingwei.tech)
對於這些特定方案,最好的辦法是使用限制可能值的白名單過濾器:
// Value whitelist from qingwei.tech
// $dir can only be 'DESC' otherwise it will be 'ASC'
if (empty($dir) || $dir !== 'DESC') {
$dir = 'ASC';
}
㈧ php如何防止sql注入
若是你的站點沒有運用嚴厲的用戶輸入查驗,那麼常簡單遭到SQL寫入進犯。SQL寫入進犯一般通過給站點資料庫提交不良的數據或查詢句子來完成,很能夠使資料庫中的紀錄遭到露出,更改或被刪去。 為了避免SQL寫入進犯,PHP自帶一個功用能夠對輸入的字元串進行處置,能夠在較底層對輸入進行安全上的開始處置,也即Magic Quotes。(php.ini magic_quotes_gpc)。默許情況下敞開,若是magic_quotes_gpc選項啟用,那麼輸入的字元串中的單引號,雙引號和其它一些字元前將會被主動加 上反斜杠。 但Magic Quotes並不是一個很通用的處理方案,沒能屏蔽一切有潛在風險的字元,並且在許多伺服器上Magic Quotes並沒有被啟用。所以,咱們還需要運用其它多種方法來避免SQL寫入。 許 多資料庫自身就供給這種輸入數據處置功用。例如PHP的MySQL操作函數中有addslashes()、mysql_real_escape_string()、mysql_escape_string()等函數,可將特別字元和能夠導致資料庫操作犯錯的字 符轉義。那麼這三個功用函數之間有啥卻別呢?下面咱們就來具體敘述下。
㈨ PHP中如何防止SQL注入
我把問題和贊同最多的答題翻譯了下來。提問:如果用戶的輸入能直接插入到SQL語句中,那麼這個應用就易收到SQL注入的攻擊,舉個例子:$unsafe_variable = $_POST['user_input']; mysqli_query("INSERT INTO table (column) VALUES ('" . $unsafe_variable . "')");用戶可以輸入諸如 : value'); DROP TABLE table;-- ,SQL語句就變成這樣了:INSERT INTO table (column) VALUES('value'); DROP TABLE table;--')(譯者註:這樣做的結果就是把table表給刪掉了) 我們可以做什麼去阻止這種情況呢?回答:使用prepared statements(預處理語句)和參數化的查詢。這些SQL語句被發送到資料庫伺服器,它的參數全都會被單獨解析。使用這種方式,攻擊者想注入惡意的SQL是不可能的。要實現這個主要有兩種方式:1. 使用 PDO:$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name'); $stmt->execute(array(':name' => $name)); foreach ($stmt as $row) { // do something with $row }2. 使用 Mysqli:$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?'); $stmt->bind_param('s', $name); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { // do something with $row }PDO需要注意的是使用PDO去訪問MySQL資料庫時,真正的prepared statements默認情況下是不使用的。為了解決這個問題,你需要禁用模擬的prepared statements。下面是使用PDO創建一個連接的例子:$dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass'); $dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);上面的例子中,錯誤報告模式並不是強制和必須的,但建議你還是添加它。通過這種方式,腳本在出問題的時候不會被一個致命錯誤終止,而是拋出PDO Exceptions,這就給了開發者機會去捕獲這個錯誤。然而第一行的 setAttribute() 是強制性的,它使得PDO禁用模擬的prepared statements並使用真正的prepared statements。這可以確保這些語句和值在被發送到MySQL伺服器之前不會被PHP解析(這使得攻擊者沒有注入惡意SQL的機會)。盡管你可以使用可選的構造函數參數去設置 charset ,但重點需要注意的是小於5.3.6的PHP版本,DSN(Data Source Name)是默認忽略 charset 參數的。說明當你傳一個SQL語句做預處理時會發生什麼?它被資料庫伺服器解析和編譯了。通過指定參數(通過之前例子中的 ? 或者像 :name 這樣的命名式參數)你告訴資料庫引擎你是想過濾它。接著當你調用 execute() 函數時,prepared statements會和你剛才指定的參數的值結合。在此重要的是,參數的值是和編譯過的語句結合,而非一個SQL字元串。SQL注入就是當創建被發送到資料庫的SQL語句時,通過欺騙的手段讓腳本去引入惡意的字元串。因此當你使用單獨的參數發送真實正確的SQL時,你就限制了被某些不是你真實意圖的事情而搞掛掉的風險。使用prepared statements 傳遞的任何參數都會被當做字元串對待(不過資料庫引擎可能會做一些優化,這些參數最終也可能變成numbers)(譯者註:意思就是把參數當做一個字元串而不會去做額外的行為)。比如在上面的例子中,如果 $name 變數的值是 'Sarah'; DELETE * FROM employees ,產生的結果是會去搜索"'Sarah'; DELETE * FROM employees"這一整個字元串,最終的結果你也就不會面對的是一張空表了。使用prepared statements的另一個好處是,如果你在同一session中再次執行相同的語句,也就不會被再次解析和編譯,這樣你就獲得一些速度上的提升。
㈩ 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關鍵字替換為空.