国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP 防注入安全實現程序代碼

2024-05-04 21:48:17
字體:
來源:轉載
供稿:網友

以前講述的很多關于sql防注入的代碼,但是還是得從我們的服務器腳本開始了,下面就來講述一個下php中防注入的一些常見方法大家可參考.

最常用見的可能就是:

首先將magic_quotes_gpc設置為On,display_errors設置為Off,如果id型,我們利用intval()將其轉換成整數類型,如代碼:$id=intval($id);

好了下面我來介紹php提交數據過濾的基本原則 

1)提交變量進數據庫時,我們必須使用addslashes()進行過濾,像我們的注入問題,一個addslashes()也就搞定了,其實在涉及到變量取值時,intval()函數對字符串的過濾也是個不錯的選擇.

2)在php.ini中開啟magic_quotes_gpc和magic_quotes_runtime。magic_quotes_gpc可以把get,post,cookie里的引號變為斜杠,magic_quotes_runtime對于進出數據庫的數據可以起到格式話的作用,其實,早在以前注入很瘋狂時,這個參數就很流行了.

3)在使用系統函數時,必須使用escapeshellarg(),escapeshellcmd()參數去過濾,這樣你也就可以放心的使用系統函數.

4)對于跨站,strip_tags(),htmlspecialchars()兩個參數都不錯,對于用戶提交的的帶有html和php的標記都將進行轉換,比如尖括號"<"就將轉化為 "<"這樣無害的字符。

代碼如下:

$new = htmlspecialchars("<a href='test'>Test</a>",ENT_QUOTES);
strip_tags($text,); 

5)對于相關函數的過濾,就像先前的include(),unlink,fopen()等等,只要你把你所要執行操作的變量指定好或者對相關字符過濾嚴密,我想這樣也就無懈可擊了.

2、PHP簡單的數據過濾

1)入庫:trim($str),addslashes($str)

2)出庫:stripslashes($str)

3)顯示:htmlspecialchars(nl2br($str))

分享一個實例,具體的代碼如下:

  1. <?php 
  2.    //security.php 
  3. /** 
  4.  * @author zhengwei 
  5.  * @copyright 2007 
  6.  */ 
  7. /*  
  8. 函數名稱:inject_check()  
  9. 函數作用:檢測提交的值是不是含有SQL注射的字符,防止注射,保護服務器安全  
  10. 參  數:$sql_str: 提交的變量  
  11. 返 回 值:返回檢測結果,ture or false  
  12. 函數作者:heiyeluren  
  13. */  
  14. function inject_check($sql_str) {   
  15.   return eregi('select|insert|update|delete|'|/*|*|../|./|union|into|load_file|outfile', $sql_str);    // 進行過濾   
  16. } //開源代碼Vevb.com 
  17.  
  18. /*  
  19. 函數名稱:verify_id()  
  20. 函數作用:校驗提交的ID類值是否合法  
  21. 參  數:$id: 提交的ID值  
  22. 返 回 值:返回處理后的ID  
  23. 函數作者:heiyeluren  
  24. */  
  25. function verify_id($id=null) {   
  26.   if (!$id) { exit('沒有提交參數!'); }    // 是否為空判斷   
  27.   elseif (inject_check($id)) { exit('提交的參數非法!'); }    // 注射判斷   
  28.   elseif (!is_numeric($id)) { exit('提交的參數非法!'); }    // 數字判斷   
  29.   $id = intval($id);    // 整型化   
  30.  
  31.   return  $id;   
  32. }   
  33.  
  34. /*  
  35. 函數名稱:str_check()  
  36. 函數作用:對提交的字符串進行過濾  
  37. 參  數:$var: 要處理的字符串  
  38. 返 回 值:返回過濾后的字符串  
  39. 函數作者:heiyeluren  
  40. */  
  41. function str_check( $str ) {   
  42.   if (!get_magic_quotes_gpc()) {    // 判斷magic_quotes_gpc是否打開   
  43.     $str = addslashes($str);    // 進行過濾   
  44.   }   
  45.   $str = str_replace("_""_"$str);    // 把 '_'過濾掉   
  46.   $str = str_replace("%""%"$str);    // 把 '%'過濾掉   
  47.  
  48.   return $str;    
  49. }   
  50.  
  51. /*  
  52. 函數名稱:post_check()  
  53. 函數作用:對提交的編輯內容進行處理  
  54. 參  數:$post: 要提交的內容  
  55. 返 回 值:$post: 返回過濾后的內容  
  56. 函數作者:heiyeluren  
  57. */  
  58. function post_check($post) {   
  59.   if (!get_magic_quotes_gpc()) {    // 判斷magic_quotes_gpc是否為打開   
  60.     $post = addslashes($post);    // 進行magic_quotes_gpc沒有打開的情況對提交數據的過濾   
  61.   }   
  62.   $post = str_replace("_""_"$post);    // 把 '_'過濾掉   
  63.   $post = str_replace("%""%"$post);    // 把 '%'過濾掉   
  64.   $post = nl2br($post);    // 回車轉換   
  65.   $post = htmlspecialchars($post);    // html標記轉換   
  66.  
  67.   return $post;   
  68. }  
  69.  
  70.  
  71. foreach ($_POST as $post_key=>$post_var
  72.  if (is_numeric($post_var)) { 
  73.   $post[strtolower($post_key)] = get_int($post_var); 
  74.  } else { 
  75.   $post[strtolower($post_key)] = get_str($post_var); 
  76.  } 
  77.  
  78. /* 過濾函數 */ 
  79. //整型過濾函數 
  80. function get_int($number
  81.     return intval($number); 
  82. //字符串型過濾函數 
  83. function get_str($string
  84.     if (!get_magic_quotes_gpc()) { 
  85.  return addslashes($string); 
  86.     } 
  87.     return $string
  88.  
  89. ?> 

在有些cms中我會看到如下代碼:

  1. foreach($HTTP_POST_VARS as $key=>$value){  
  2. $ArrPostAndGet[]=$value;  
  3. }  
  4. foreach($HTTP_GET_VARS as $key=>$value){  
  5. $ArrPostAndGet[]=$value;  

這個的代碼然后在所有頁面都加載這個函數,這樣過濾個人發現好像上傳文件時會有問題.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 西畴县| 鹿邑县| 吉林省| 苍南县| 茂名市| 图们市| 丹棱县| 巴南区| 菏泽市| 石棉县| 内乡县| 开鲁县| 巴马| 吉水县| 忻城县| 石城县| 凌云县| 峨山| 山阴县| 滨海县| 长治县| 禄劝| 平原县| 舒兰市| 大新县| 象山县| 井冈山市| 巴南区| 定结县| 江北区| 巫溪县| 洪洞县| 临颍县| 股票| 商水县| 星子县| 泾阳县| 桑植县| 灌云县| 同仁县| 繁昌县|