防止sql注入的方法

1.php

打開magic_quotes_gpc來防止SQL注入
SQL注入是很是危險的問題,小則網站後臺被入侵,重則整個服務器淪陷,
因此必定要當心。php.ini中有一個設置:

magic_quotes_gpc = Off
這個默認是關閉的,若是它打開後將自動把用戶提交對sql的查詢進行轉換,
好比把 ' 轉爲 \'等,這對防止sql注射有重大做用。因此咱們推薦設置爲:

magic_quotes_gpc = On
(10) 錯誤信息控制

通常php在沒有鏈接到數據庫或者其餘狀況下會有提示錯誤,通常錯誤信息中會包含php腳本當

前的路徑信息或者查詢的SQL語句等信息,這類信息提供給黑客後,是不安全的,因此通常服務器建議禁止錯誤提示:

display_errors = Off

若是你倒是是要顯示錯誤信息,必定要設置顯示錯誤的級別,好比只顯示警告以上的信息:

error_reporting = E_WARNING & E_ERROR

固然,我仍是建議關閉錯誤提示。
(11) 錯誤日誌

建議在關閉display_errors後可以把錯誤信息記錄下來,便於查找服務器運行的緣由:

log_errors = On

同時也要設置錯誤日誌存放的目錄,建議根apache的日誌存在一塊兒:

error_log = D:/usr/local/apache2/logs/php_error.log

注意:給文件必須容許apache用戶的和組具備寫的權限。

MYSQL的降權運行

新創建一個用戶好比mysqlstart

net user mysqlstart fuckmicrosoft /add

net localgroup users mysqlstart /del

不屬於任何組

若是MYSQL裝在d:\mysql ,那麼,給 mysqlstart 徹底控制 的權限

而後在系統服務中設置,MYSQL的服務屬性,在登陸屬性當中,選擇此用戶 mysqlstart 而後輸入密碼,肯定。

從新啓動 MYSQL服務,而後MYSQL就運行在低權限下了。

若是是在windos平臺下搭建的apache咱們還須要注意一點,apache默認運行是system權限,

這很恐怖,這讓人感受很不爽.那咱們就給apache降降權限吧。

net user apache fuckmicrosoft /add

net localgroup users apache /del

ok.咱們創建了一個不屬於任何組的用戶apche。

咱們打開計算機管理器,選服務,點apache服務的屬性,咱們選擇log on,選擇this account,咱們填入上面所創建的帳戶和密碼,

重啓apache服務,ok,apache運行在低權限下了。

實際上咱們還能夠經過設置各個文件夾的權限,來讓apache用戶只能執行咱們想讓它能幹的事情,給每個目錄創建一個單獨能讀寫的用戶。

這也是當前不少虛擬主機提供商的流行配置方法哦,不過這種方法用於防止這裏就顯的有點大材小用了。

2mysql

雖然國內不少PHP程序員仍在依靠addslashes防止SQL注入,仍是建議你們增強中文防止SQL注入的檢查。addslashes的問題在於黑客能夠用0xbf27來代替單引號,而addslashes只是將0xbf27修改成0xbf5c27,成爲一個有效的多字節字符,其中的0xbf5c仍會被看做是單引號,因此addslashes沒法成功攔截。

固然addslashes也不是毫無用處,它是用於單字節字符串的處理,多字節字符仍是用mysql_real_escape_string吧

if (!get_magic_quotes_gpc()) {
 
$lastname = addslashes($_POST[‘lastname’]);
 
} else {
 
$lastname = $_POST[‘lastname’];
 
}
最好對magic_quotes_gpc已經開放的狀況下,仍是對$_POST[’lastname’]進行檢查一下。

再說下mysql_real_escape_string和mysql_escape_string這2個函數的區別:

mysql_real_escape_string 必須在(PHP 4 >= 4.3.0, PHP 5)的狀況下才能使用。不然只能用 mysql_escape_string ,二者的區別是:mysql_real_escape_string 考慮到鏈接的

當前字符集,而mysql_escape_string 不考慮。
總結一下:

* addslashes() 是強行加\;

* mysql_real_escape_string() 會判斷字符集,可是對PHP版本有要求;

* mysql_escape_string不考慮鏈接的當前字符集。
相關文章
相關標籤/搜索