㈠ 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中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程序設計有所幫助。
㈢ 常見WEB攻擊之命令注入
即 Command Injection。是指通過提交惡意構造的參數破壞命令語句結構,從而達到執行惡意命令的目的。
在Web應用中,有時候會用到一些命令執行的函數,如php中system、exec、shell_exec等,當對用戶輸入的命令沒有進行限制或者過濾不嚴導致用戶可以執行任意命令時,就會造成命令執行漏洞。
黑客將構造好的命令發送給web伺服器,伺服器根據拼接命令執行注入的命令,最後講結果顯示給黑客。
以DVWA為例,下面使用ping命令測試IP,正常輸入一個IP或者域名會返回一個正常的返回結果。
當輸入惡意構造的語句 www..com && netstat -an,會把後面的語句也給執行了:
執行結果:
PHP的常見命令執行函數:
system(),exec(),shell_exec(),passthru()
1、system()
system — 執行外部程序,並且顯示輸出
常規用法:
使用PHP執行:
php test1.php www..com
exec — 執行一個外部程序
3、shell_exec()
shell_exec — 通過 shell 環境執行命令,並且將完整的輸出以字元串的方式返回。
4、passthru()
passthru() 函數與 exec() 函數類似,執行外部程序並且顯示原始輸出。
Windows:
用^轉義<
如果加上單引號會寫不進去,如果加雙引號會把雙引號一起寫進去,所以要用^轉義<
Linux:
linux下需要用來轉義<,不過很多php都默認開啟gpc,可以先用16進制轉換一句話再用xxd命令把16進制還原.
<?php eval($_POST[pass]);>
轉換為16進制:
由於我用的是Linux,所以使用payload寫入一句話:
寫入成功:
1、採用白名單,或使用正則表達式進行過濾。
2、不要讓用戶可以直接控制eval()、system、exec、shell_exec等函數的參數。
3、在進入執行命令函數和方法前,對變數進行過濾,對敏感字元進行轉義。
㈣ thinkphp 3.2.3 exp注入漏洞分析
在官網下載thinkphp3.2.3,配置MySQL賬號密碼於Convention.php文件,添加一行用於列印SQL語句。漏洞代碼通過特定的HTTP請求觸發,如:http://127.0.0.1/index.php?id[0]=exp&id[1]==1 or sleep(5)。通過斷點調試,跟蹤至Model類的select函數,進而深入至其內部處理邏輯,發現$exp的值即為傳入的exp,該值被直接拼接到後續SQL語句中,形成SQL注入。
使用I函數可以防止注入攻擊,原因在於ThinkPHP\Common\functions.ph中的think_filter函數會將特殊關鍵字(如EXP、OR等)加上空格,避免進入if語句進行SQL字元拼接。
對於普通的SQL注入,thinkphp3.2.3會通過解析資料庫欄位類型來防止注入。在Model類的_parseType()函數中,對於欄位類型為int(11)的欄位,會將傳入的值轉化為整數類型,使得注入語句失效。對於字元型注入,系統在Think\Db\Driver.class.php中的escapeString()函數中對特殊符號進行轉義,實現防禦。
除了exp注入,還有bind注入方法。bind注入通過在SQL語句中插入特殊符號,導致SQL錯誤進行攻擊。雖然實現較為復雜,但由於think_filter函數未對bind進行過濾,因此即使使用了I函數獲取參數,仍有可能實現bind注入。
針對此漏洞的修復策略包括:1. 盡量在應用中使用I函數獲取用戶輸入的參數;2. 修復代碼,將安全補丁整合到index.php入口文件中,確保應用從源頭開始執行安全措施。
㈤ 怎麼編寫php代碼才不會被SQL注入攻擊
建站一段時間後總能聽得到什麼什麼網站被掛馬,什麼網站被黑。好像入侵掛馬似乎是件很簡單的事情。其實,入侵不簡單,簡單的是你的網站的必要安全措施並未做好。
有條件建議找專業做網站安全的sine安全來做安全維護。
一:掛馬預防措施:
1、建議用戶通過ftp來上傳、維護網頁,盡量不安裝asp的上傳程序。
2、對asp上傳程序的調用一定要進行身份認證,並只允許信任的人使用上傳程序。這其中包括各種新聞發布、商城及論壇程
序,只要可以上傳文件的asp都要進行身份認證!
3、asp程序管理員的用戶名和密碼要有一定復雜性,不能過於簡單,還要注意定期更換。
4、到正規網站下載asp程序,下載後要對其資料庫名稱和存放路徑進行修改,資料庫文件名稱也要有一定復雜性。
5、要盡量保持程序是最新版本。
6、不要在網頁上加註後台管理程序登陸頁面的鏈接。
7、為防止程序有未知漏洞,可以在維護後刪除後台管理程序的登陸頁面,下次維護時再通過ftp上傳即可。
8、要時常備份資料庫等重要文件。
9、日常要多維護,並注意空間中是否有來歷不明的asp文件。記住:一分汗水,換一分安全!
10、一旦發現被入侵,除非自己能識別出所有木馬文件,否則要刪除所有文件。
11、定期對網站進行安全的檢測,具體可以利用網上一些工具,如sinesafe網站掛馬檢測工具!
二:掛馬恢復措施:
1.修改帳號密碼
不管是商業或不是,初始密碼多半都是admin。因此你接到網站程序第一件事情就是「修改帳號密碼」。帳號
密碼就不要在使用以前你習慣的,換點特別的。盡量將字母數字及符號一起。此外密碼最好超過15位。尚若你使用
SQL的話應該使用特別點的帳號密碼,不要在使用什麼什麼admin之類,否則很容易被入侵。
2.創建一個robots.txt
Robots能夠有效的防範利用搜索引擎竊取信息的駭客。
3.修改後台文件
第一步:修改後台里的驗證文件的名稱。
第二步:修改conn.asp,防止非法下載,也可對資料庫加密後在修改conn.asp。
第三步:修改ACESS資料庫名稱,越復雜越好,可以的話將數據所在目錄的換一下。
4.限制登陸後台IP
此方法是最有效的,每位虛擬主機用戶應該都有個功能。你的IP不固定的話就麻煩點每次改一下咯,安全第一嘛。
5.自定義404頁面及自定義傳送ASP錯誤信息
404能夠讓駭客批量查找你的後台一些重要文件及檢查網頁是否存在注入漏洞。
ASP錯誤嘛,可能會向不明來意者傳送對方想要的信息。
6.慎重選擇網站程序
注意一下網站程序是否本身存在漏洞,好壞你我心裡該有把秤。
7.謹慎上傳漏洞
據悉,上傳漏洞往往是最簡單也是最嚴重的,能夠讓黑客或駭客們輕松控制你的網站。
可以禁止上傳或著限制上傳的文件類型。不懂的話可以找你的網站程序提供商。
8. cookie 保護
登陸時盡量不要去訪問其他站點,以防止 cookie 泄密。切記退出時要點退出在關閉所有瀏覽器。
9.目錄許可權
請管理員設置好一些重要的目錄許可權,防止非正常的訪問。如不要給上傳目錄執行腳本許可權及不要給非上傳目錄給於寫入權。
10.自我測試
如今在網上黑客工具一籮筐,不防找一些來測試下你的網站是否OK。
11.例行維護
a.定期備份數據。最好每日備份一次,下載了備份文件後應該及時刪除主機上的備份文件。
b.定期更改資料庫的名字及管理員帳密。
c.借WEB或FTP管理,查看所有目錄體積,最後修改時間以及文件數,檢查是文件是否有異常,以及查看是否有異常的賬號。
網站被掛馬一般都是網站程序存在漏洞或者伺服器安全性能不達標被不法黑客入侵攻擊而掛馬的。
網站被掛馬是普遍存在現象然而也是每一個網站運營者的心腹之患。
您是否因為網站和伺服器天天被入侵掛馬等問題也曾有過想放棄的想法呢,您否也因為不太了解網站技術的問題而耽誤了網站的運營,您是否也因為精心運營的網站反反復復被一些無聊的黑客入侵掛馬感到徬彷且很無耐。有條件建議找專業做網站安全的sine安全來做安全維護。