當前位置:首頁 » 編程語言 » php防注入代碼

php防注入代碼

發布時間: 2025-04-08 06:56:15

『壹』 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官方文檔。

『貳』 留言板防灌水功能應該怎麼做怎麼防止sql注入用PHP編寫

防灌水:

  1. 對無意義帖判定,比如:字數太少,純數字,無意義的連續數字或字母。

  2. 發帖時間間隔和發帖量

  3. 系統設置一批關鍵詞匹配,發現有類似的先設為需審核 ,由後台手動操作。

防sql注入

  1. 先對提交數據中的危險字元過濾或編碼。比如:名稱或帖子標題,一定不能是html,直接進行htmlencode ,最後輸出到頁面上,也不會變成html,而是顯示原始字元。對需要使用html的內容部分,過濾script,style等標簽,或者直接用strip_tags 函數只保留必要的段落等排版標簽。

  2. 其次也可以考慮使用bbcode或markdown等對排版有限制的語法轉義

  3. 資料庫操作使用pdo參數編譯的模式,可以有效防止提交數據中的注入字元(會變成正常字元插入到資料庫中,這也可以防止誤判,因為很多IT類的技術帖需要在內容中有這些關鍵字)

『叄』 PHP網站怎麼sql注入有沒有破解防禦的方法

網站的運行安全肯定是每個站長必須考慮的問題,大家知道,大多數黑客攻擊網站都是採用sql注入,這就是我們常說的為什麼最原始的靜態的網站反而是最安全的。 今天我們講講PHP注入的安全規范,防止自己的網站被sql注入。
如今主流的網站開發語言還是php,那我們就從php網站如何防止sql注入開始說起:
Php注入的安全防範通過上面的過程,我們可以了解到php注入的原理和手法,當然我們也同樣可以制定出相應該的防範方法:
首先是對伺服器的安全設置,這里主要是php+mysql的安全設置和linux主機的安全設置。對php+mysql注射的防範,首先將magic_quotes_gpc設置為On,display_errors設置為Off,如果id型,我們利用intval()將其轉換成整數類型,如代碼:
$id=intval($id);
mysql_query=」select *from example where articieid=』$id』」;或者這樣寫:mysql_query(」SELECT * FROM article WHERE articleid=」.intval($id).」")
如果是字元型就用addslashes()過濾一下,然後再過濾」%」和」_」如:
$search=addslashes($search);
$search=str_replace(「_」,」\_」,$search);
$search=str_replace(「%」,」\%」,$search);
當然也可以加php通用防注入代碼:
/*************************
PHP通用防注入安全代碼
說明:
判斷傳遞的變數中是否含有非法字元
如$_POST、$_GET
功能:
防注入
**************************/
//要過濾的非法字元
$ArrFiltrate=array(」『」,」;」,」union」);
//出錯後要跳轉的url,不填則默認前一頁
$StrGoUrl=」";
//是否存在數組中的值
function FunStringExist($StrFiltrate,$ArrFiltrate){
foreach ($ArrFiltrate as $key=>$value){
if (eregi($value,$StrFiltrate)){
return true;
}
}
return false;
}
//合並$_POST 和 $_GET
if(function_exists(array_merge)){
$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);
}else{
foreach($HTTP_POST_VARS as $key=>$value){
$ArrPostAndGet[]=$value;
}
foreach($HTTP_GET_VARS as $key=>$value){
$ArrPostAndGet[]=$value;
}
}
//驗證開始
foreach($ArrPostAndGet as $key=>$value){
if (FunStringExist($value,$ArrFiltrate)){
echo 「alert(/」Neeao提示,非法字元/」);」;
if (empty($StrGoUrl)){
echo 「history.go(-1);」;
}else{
echo 「window.location=/」".$StrGoUrl.」/」;」;
}
exit;
}
}
?>
/*************************
保存為checkpostandget.php
然後在每個php文件前加include(「checkpostandget.php「);即可
**************************/
另外將管理員用戶名和密碼都採取md5加密,這樣就能有效地防止了php的注入。
還有伺服器和mysql也要加強一些安全防範。
對於linux伺服器的安全設置:
加密口令,使用「/usr/sbin/authconfig」工具打開密碼的shadow功能,對password進行加密。
禁止訪問重要文件,進入linux命令界面,在提示符下輸入:
#chmod 600 /etc/inetd.conf //改變文件屬性為600
#chattr +I /etc/inetd.conf //保證文件屬主為root
#chattr –I /etc/inetd.conf // 對該文件的改變做限制
禁止任何用戶通過su命令改變為root用戶
在su配置文件即/etc/pam.d/目錄下的開頭添加下面兩行:
Auth sufficient /lib/security/pam_rootok.so debug
Auth required /lib/security/pam_whell.so group=wheel
刪除所有的特殊帳戶
#userdel lp等等 刪除用戶
#groupdel lp等等 刪除組
禁止不使用的suid/sgid程序
#find / -type f \(-perm -04000 - o –perm -02000 \) \-execls –lg {} \;

『肆』 php防sql注入漏洞可以用什麼函數

1.函數的構建
function inject_check($sql_str) {
return eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str); // 進行過濾
}
function verify_id($id=null) {
if (!$id) { exit('沒有提交參數!'); } // 是否為空判斷
elseif (inject_check($id)) { exit('提交的參數非法!'); } // 注射判斷
elseif (!is_numeric($id)) { exit('提交的參數非法!'); } // 數字判斷
$id = intval($id); // 整型化
return $id;
}?
function str_check( $str ) {
if (!get_magic_quotes_gpc()) { // 判斷magic_quotes_gpc是否打開
$str = addslashes($str); // 進行過濾
}
$str = str_replace("_", "\_", $str); // 把 '_'過濾掉
$str = str_replace("%", "\%", $str); // 把 '%'過濾掉
return $str;
}
function post_check($post) {
if (!get_magic_quotes_gpc()) { // 判斷magic_quotes_gpc是否為打開
$post = addslashes($post); // 進行magic_quotes_gpc沒有打開的情況對提交數據的過濾
}
$post = str_replace("_", "\_", $post); // 把 '_'過濾掉
$post = str_replace("%", "\%", $post); // 把 '%'過濾掉
$post = nl2br($post); // 回車轉換
$post = htmlspecialchars($post); // html標記轉換
return $post;
}
2.函數的使用實例
<?php
if (inject_check($_GET['id']))
{
exit('你提交的數據非法,請檢查後重新提交!');
}
else
{
$id = $_GET['id'];
//處理數據………………
}
?>

『伍』 php中addslashes函數與sql防注入

本文實例講述了php中addslashes函數與sql防注入。分享給大家供大家參考。具體分析如下:
addslashes可會自動給單引號,雙引號增加\\\\\\,這樣我們就可以安全的把數據存入資料庫中而不黑客利用,參數'a..z'界定所有大小寫字母均被轉義,代碼如下:
復制代碼
代碼如下:echo
addcslashes('foo[
]','a..z');
//輸出:foo[
]
$str="is
your
name
o'reilly?";
//定義字元串,其中包括需要轉義的字元
echo
addslashes($str);
//輸出經過轉義的字元串
定義和用法:addslashes()
函數在指定的預定義字元前添加反斜杠.
這些預定義字元是:單引號
('),雙引號
("),反斜杠
(),null
語法:addslashes(string),當然這個函數更安全,實例代碼如下:
復制代碼
代碼如下:$str="<a
href='test'>test</a>";
//定義包含特殊字元的字元串
$new=htmlspecialchars($str,ent_quotes);
//進行轉換操作
echo
$new;
//輸出轉換結果
//不過輸出時要用到
$str="jane
&
'tarzan'";
//定義html字元串
echo
html_entity_decode($str);
//輸出轉換後的內容
echo
"<br/>";
echo
html_entity_decode($str,ent_quotes);
//有可選參數輸出的內容
希望本文所述對大家的PHP程序設計有所幫助。

『陸』 php如何防止sql注入攻擊

注入式攻擊的類型

可能存在許多不同類型的攻擊動機,但是乍看上去,似乎仿橡存在更多的類型。這是非常真實的-如果惡意用戶發現了一個能夠執行多個查詢的辦法的話。本文後面,我們會對此作詳細討論。

果你的腳本正在執行一個SELECT指令,那麼,攻擊者可以強迫顯示一個表格中的每一行記錄-通過把一個例如 =1這樣的條件注態大頌入到WHERE子句中,如下所示(其中,注入部分以粗體顯示):

SELECT*FROMsitesWHEREsite='html580.com'OR1=1;'

正如我們在前面所討論的,這本身可能是很有用的信息,因為它揭示了該表格的一般結構(這是一條普通的記錄所不能實現的),以及潛在地顯示包含機密信息的記錄。

一條更新指令潛在地具有更直接的威脅。通過把其它屬性放到SET子句中,一名攻擊者可以修改當前被更新的記錄中的任何欄位,例如下面的例子(其中,注入部分以粗體顯示):

UPDATEsitesSETsite='diygw.com'WHERE=

site='html580.com'

通過把一個例如1=1這樣的恆真條件添加到一條更新指令的WHERE子句中,帆鄭這種修改范圍可以擴展到每一條記錄,例如下面的例子:

UPDATEsitesSETsite='diygw.com'WHERE=

site='html580.comOR1=1;'

最危險的指令可能是DELETE-這是不難想像的。其注入技術與我們已經看到的相同-通過修改WHERE子句來擴展受影響的記錄的范圍,例如下面的例子:

DELETEFROMsitesSETsite='diygw.com'WHERE=

site='html580.comOR1=1;

熱點內容
魅族便簽加密 發布:2025-04-08 12:12:33 瀏覽:926
固態重建編譯器 發布:2025-04-08 12:09:17 瀏覽:698
小白編譯IPK 發布:2025-04-08 12:09:09 瀏覽:645
php刷新緩存 發布:2025-04-08 11:58:40 瀏覽:592
安卓和蘋果系統哪個更耐用 發布:2025-04-08 11:56:26 瀏覽:240
長城寬頻100m上傳速度 發布:2025-04-08 11:46:56 瀏覽:704
西安交大編譯原理全文 發布:2025-04-08 11:46:56 瀏覽:442
解壓輕松站 發布:2025-04-08 11:41:09 瀏覽:810
三國殺激活碼破解演算法 發布:2025-04-08 11:40:26 瀏覽:204
sql中的insert 發布:2025-04-08 11:30:19 瀏覽:176