php通用防注入與注入詳細說明

來源:互聯網
上載者:User

還有伺服器和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 {} ;

 代碼如下 複製代碼
$arrfiltrate=array("'",";","union","select","insert","update","delete","load_file","outfile");

 //出錯後要跳轉的url

 代碼如下 複製代碼

$strgourl="";  

function funstringexist($strfiltrate,$arrfiltrate)
{
  foreach ($arrfiltrate as $key=>$value)
  {
    if (eregi($value,$strfiltrate))
    {
      return true;
    }
  }
  return false;
}

//合并$_post 、 $_get和$_cookie

 代碼如下 複製代碼
if(function_exists(array_merge))   
{
  $arrpostgetcookiesession=array_merge($http_post_vars,$http_get_vars,$http_cookie_vars); 
  $string = implode("",$arrpostgetcookiesession);
}

//驗證

 代碼如下 複製代碼
if(funstringexist($string,$arrfiltrate))
{
  echo "<script language="網頁特效">alert("提示,非法字元");</script>";
}
else
{
  echo "<script language="javascript">window.location="".$strgourl."";</script>";
}

第二款防注入執行個體

 代碼如下 複製代碼

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;
}
}


看一下關於注入細節

轉化成ascii後是char(97,108,112,104,97)
轉化成16進位是0x616c706861
(我們將在光碟片中提供16進位和ascii轉換工具)
好了直接在瀏覽器裡輸入:

 代碼如下 複製代碼
http://localhost/site/admin/login.php?
username=char(97,108,112,104,97)%23


sql語句變成:

 代碼如下 複製代碼

select * from alphaaut

hor where username=char(97,108,112,104,97)# and password=


如圖21


  正如我們期望的那樣,他順利執行了,我們得到我們想要的。
  當然咯,我們也可以這樣構造

 代碼如下 複製代碼
http://www.111cn.net/site/admin/login.php?username=0x616c706861%23


sql語句變成:

 代碼如下 複製代碼
select * from alphaauthor where username
=0x616c706861%23# and password=


我們再一次是成功者了。很有成就感吧,

或許你會問我們是否可以把#也放在char()裡
實際上char(97,108,112,104,97)相當於 alpha
注意是alpha上加引號,表示alpha字串。
我們知道在mysql中如果執行

 代碼如下 複製代碼
mysql> select * from dl_users where username=alpha;
error 1054 (42s22): unknown column alpha in where clause


看返回錯誤了。因為他會認為alpha是一個變數。所以我們得在alpha上加引號。
如下

 代碼如下 複製代碼
mysql> select * from dl_users where username= alpha ;

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.