成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解PHP防范SQL注入的具體方法

開發 后端
PHP防范SQL注入是一個非常重要的安全手段。相信大家對這一安全防范方法還不是很了解,希望通過本文介紹的內容大家能夠充分掌握這一知識點。

一個優秀的PHP程序員除了要能順利的編寫代碼,還需要具備使程序處于安全環境下的能力。今天我們要向大家講解的是有關PHP防范SQL注入的相關方法。#t#

說到網站安全就不得不提到SQL注入(SQL Injection),如果你用過ASP,對SQL注入一定有比較深的理解,PHP的安全性相對較高,這是因為MYSQL4以下的版本不支持子語句,而且當php.ini里的 magic_quotes_gpc 為On 時。

提交的變量中所有的 ' (單引號), " (雙引號), \ (反斜線) and 空字符會自動轉為含有反斜線的轉義字符,給SQL注入帶來不少的麻煩。

請看清楚:“麻煩”而已~這并不意味著PHP防范SQL注入,書中就講到了利用改變注入語句的編碼來繞過轉義的方法,比如將SQL語句轉成ASCII編碼(類似:char(100,58,92,108,111,99,97,108,104,111,115,116…)這樣的格式),或者轉成16進制編碼,甚至還有其他形式的編碼,這樣以來,轉義過濾便被繞過去了,那么怎樣防范呢:

 

a. 打開magic_quotes_gpc或使用addslashes()函數

 

在新版本的PHP中,就算magic_quotes_gpc打開了,再使用addslashes()函數,也不會有沖突,但是為了更好的實現版本兼容,建議在使用轉移函數前先檢測magic_quotes_gpc狀態,或者直接關掉,代碼如下:

PHP防范SQL注入的代碼

  1. // 去除轉義字符   
  2. function stripslashes_array($array) {   
  3. if (is_array($array)) {   
  4. foreach ($array as $k => $v) {   
  5. $array[$k] = stripslashes_array($v);   
  6. }   
  7. } else if (is_string($array)) {   
  8. $array = stripslashes($array);   
  9. }   
  10. return $array;   
  11. }   
  12. @set_magic_quotes_runtime(0);   
  13. // 判斷 magic_quotes_gpc 狀態   
  14. if (@get_magic_quotes_gpc()) {   
  15. $_GET = stripslashes_array($_GET);   
  16. $_POST = stripslashes_array($_POST);   
  17. $_COOKIE = stripslashes_array($_COOKIE);   
  18. }  

去除magic_quotes_gpc的轉義之后再使用addslashes函數,代碼如下:

PHP防范SQL注入的代碼

$keywords = addslashes($keywords);
$keywords = str_replace("_","\_",$keywords);//轉義掉”_”
$keywords = str_replace("%","\%",$keywords);//轉義掉”%”

后兩個str_replace替換轉義目的是防止黑客轉換SQL編碼進行攻擊。

 

b. 強制字符格式(類型)

 

在很多時候我們要用到類似xxx.php?id=xxx這樣的URL,一般來說$id都是整型變量,為了防范攻擊者把$id篡改成攻擊語句,我們要盡量強制變量,代碼如下:

PHP防范SQL注入的代碼

$id=intval($_GET[‘id’]);

當然,還有其他的變量類型,如果有必要的話盡量強制一下格式。

 

c. SQL語句中包含變量加引號

 

這一點兒很簡單,但也容易養成習慣,先來看看這兩條SQL語句:

SQL代碼

SELECT * FROM article WHERE articleid='$id'
SELECT * FROM article WHERE articleid=$id

兩種寫法在各種程序中都很普遍,但安全性是不同的,第一句由于把變量$id放在一對單引號中,這樣使得我們所提交的變量都變成了字符串,即使包含了正確的SQL語句,也不會正常執行,而第二句不同,由于沒有把變量放進單引號中,那我們所提交的一切,只要包含空格,那空格后的變量都會作為SQL語句執行,因此,我們要養成給SQL語句中變量加引號的習慣。

d.URL偽靜態化

URL偽靜態化也就是URL重寫技術,像Discuz!一樣,將所有的URL都rewrite成類似xxx-xxx-x.html格式,既有利于SEO,又達到了一定的安全性,也不失為一個好辦法。但要想實現PHP防范SQL注入,前提是你得有一定的“正則”基礎。
 

責任編輯:曹凱 來源: 網易博客
相關推薦

2009-11-23 15:10:28

PHP獲取當前url

2010-02-06 11:19:33

C++獲取文件

2009-11-23 19:16:32

路由器測試

2009-11-30 11:24:49

PHP將EXCEL導入

2009-12-01 09:52:40

PHP過濾字符串

2009-05-06 14:03:13

SQL Server日志log

2009-11-25 17:14:45

PHP安裝為Apach

2010-07-21 14:33:01

刪除telnet

2009-11-24 17:25:00

PHP二維數組排序

2009-11-24 20:09:35

PHP函數header

2011-04-01 13:34:12

zabbix

2009-11-24 15:43:17

PHP給圖片加水印

2009-11-24 18:18:21

PHP函數array_

2009-12-03 14:43:46

phpMyAdmin配

2012-12-19 10:36:06

2009-12-01 10:11:51

PHP自動獲取關鍵詞

2009-11-25 15:35:24

PHP實現站內搜索引擎

2010-05-19 14:54:33

2010-04-23 13:53:29

Oracle密碼

2009-12-31 15:05:00

Silverlight
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩一二区 | 一区二区三区视频在线免费观看 | 犬夜叉在线观看 | 二区在线视频 | 99久久久无码国产精品 | 亚洲成人av | 亚洲国产精品久久久 | 欧美理论片在线观看 | 久久激情视频 | 国产免费观看一级国产 | www国产成人免费观看视频,深夜成人网 | 日韩1区| 亚洲欧美一区二区三区国产精品 | 香蕉视频1024 | 99热精品在线 | 久久久久黄 | 国产黄色网址在线观看 | 日本不卡免费新一二三区 | 九九久久精品 | 狠狠的干狠狠的操 | 久草资源在线 | 亚洲国产精品久久久久久 | 麻豆久久久久久 | 欧美日韩精品亚洲 | 国产精品国产三级国产a | 午夜小视频在线播放 | 一区二区中文 | 国产美女在线观看 | 亚洲www啪成人一区二区麻豆 | 国产成人精品午夜视频免费 | 成人 在线 | 国产激情综合五月久久 | 久久精点视频 | 美女精品一区 | 欧美色视频免费 | 国产福利视频在线观看 | 91精品久久久久久久久 | 成年人视频在线免费观看 | 在线观看日本高清二区 | 国产视频一区在线 | 中文字幕视频在线 |