溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在PHP項目中防止注入攻擊

發(fā)布時間:2021-03-05 15:56:58 來源:億速云 閱讀:189 作者:Leah 欄目:開發(fā)技術

這篇文章將為大家詳細講解有關怎么在PHP項目中防止注入攻擊,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

php有什么用

php是一個嵌套的縮寫名稱,是英文超級文本預處理語言,它的語法混合了C、Java、Perl以及php自創(chuàng)新的語法,主要用來做網(wǎng)站開發(fā),許多小型網(wǎng)站都用php開發(fā),因為php是開源的,從而使得php經(jīng)久不衰。

具體分析如下:

PHP addslashes() 函數(shù)--單撇號加斜線轉義

PHP String 函數(shù)

定義和用法

addslashes() 函數(shù)在指定的預定義字符前添加反斜杠。
這些預定義字符是:
 單引號 (')
 雙引號 (")
 反斜杠 (\)
 NULL
語法:

addslashes(string)

參數(shù) 描述
 
string必需。規(guī)定要檢查的字符串。

提示和注釋

提示:該函數(shù)可用于為存儲在數(shù)據(jù)庫中的字符串以及數(shù)據(jù)庫查詢語句準備合適的字符串。
注釋:默認情況下,PHP 指令 magic_quotes_gpc 為 on,對所有的 GET、POST 和 COOKIE 數(shù)據(jù)自動運行 addslashes()。不要對已經(jīng)被 magic_quotes_gpc 轉義過的字符串使用 addslashes(),因為這樣會導致雙層轉義。遇到這種情況時可以使用函數(shù) get_magic_quotes_gpc() 進行檢測。

例子

在本例中,我們要向字符串中的預定義字符添加反斜杠:

復制代碼 代碼如下:

<?php
$str = "Who's John Adams?";
echo $str . " This is not safe in a database query.<br />";
echo addslashes($str) . " This is safe in a database query.";
?>


輸出:
Who's John Adams? This is not safe in a database query.
Who\'s John Adams? This is safe in a database query.

get_magic_quotes_gpc函數(shù)

復制代碼 代碼如下:

function html($str)
{
     $str = get_magic_quotes_gpc()?$str:addslashes($str);
     return $str;
}

get_magic_quotes_gpc:
取得 PHP 環(huán)境變數(shù) magic_quotes_gpc 的值。
語法: long get_magic_quotes_gpc(void);
傳回值: 長整數(shù)
函式種類: PHP 系統(tǒng)功能

內(nèi)容說明:
 
本函式取得 PHP 環(huán)境設定的變數(shù) magic_quotes_gpc (GPC, Get/Post/Cookie) 值。傳回 0 表示關閉本功能;傳回 1 表示本功能開啟。當 magic_quotes_gpc 開啟時,所有的 ' (單引號), " (雙引號), \ (反斜線) and 空字符會自動轉為含有反斜線的溢出字符。

addslashes -- 使用反斜線引用字符串

描述:

string addslashes ( string str)
返回字符串,該字符串為了數(shù)據(jù)庫查詢語句等的需要在某些字符前加上了反斜線。這些字符是單引號(')、雙引號(")、反斜線(\)與 NUL(NULL 字符)。

一個使用 addslashes() 的例子是當你要往數(shù)據(jù)庫中輸入數(shù)據(jù)時。例如,將名字 O'reilly 插入到數(shù)據(jù)庫中,這就需要對其進行轉義。大多數(shù)據(jù)庫使用 \ 作為轉義符:O\'reilly。這樣可以將數(shù)據(jù)放入數(shù)據(jù)庫中,而不會插入額外的 \。當 PHP 指令 magic_quotes_sybase 被設置成 on 時,意味著插入 ' 時將使用 ' 進行轉義。

默認情況下,PHP 指令 magic_quotes_gpc 為 on,它主要是對所有的 GET、POST 和 COOKIE 數(shù)據(jù)自動運行 addslashes()。不要對已經(jīng)被 magic_quotes_gpc 轉義過的字符串使用 addslashes(),因為這樣會導致雙層轉義。遇到這種情況時可以使用函數(shù) get_magic_quotes_gpc() 進行檢測。

例子 1. addslashes() 示例

復制代碼 代碼如下:

$str = "Is your name O'reilly?";
// 輸出:Is your name O\'reilly?
echo addslashes($str);
?>
get_magic_quotes_gpc()


本函數(shù)取得 PHP 環(huán)境配置的變量 magic_quotes_gpc (GPC, Get/Post/Cookie) 值。返回 0 表示關閉本功能;返回 1 表示本功能打開。當 magic_quotes_gpc 打開時,所有的 ' (單引號), " (雙引號), \ (反斜線) and 空字符會自動轉為含有反斜線的溢出字符。
 
magic_quotes_gpc

對于 php.ini 中的 magic_quotes_gpc,是設置為 off 還是為 on 呢?

個人觀點,應該設置為 on

總結如下:

1. 對于magic_quotes_gpc=on的情況,

我們可以不對輸入和輸出數(shù)據(jù)庫的字符串數(shù)據(jù)作
addslashes()和stripslashes()的操作,數(shù)據(jù)也會正常顯示。

如果此時你對輸入的數(shù)據(jù)作了addslashes()處理,
那么在輸出的時候就必須使用stripslashes()去掉多余的反斜杠。

2. 對于magic_quotes_gpc=off 的情況

必須使用addslashes()對輸入數(shù)據(jù)進行處理,但并不需要使用stripslashes()格式化輸出
因為addslashes()并未將反斜杠一起寫入數(shù)據(jù)庫,只是幫助mysql完成了sql語句的執(zhí)行。

補充:

magic_quotes_gpc 作用范圍是:WEB客戶服務端;作用時間:請求開始時,例如當腳本運行時.
magic_quotes_runtime 作用范圍:從文件中讀取的數(shù)據(jù)或執(zhí)行exec()的結果或是從SQL查詢中得到的;作用時間:每次當腳本訪問運行狀態(tài)中產(chǎn)生的數(shù)據(jù)
 
代碼:

復制代碼 代碼如下:

<?php 
/*
有時表單提交的變量不止一個,可能有十幾個,幾十個。那么一次一次地復制/粘帖addslashes(),是否麻煩了一點?由于從表單或URL獲取的數(shù)據(jù)都是以數(shù)組形式出現(xiàn)的,如$_POST、$_GET)那就自定義一個可以“橫掃千軍”的函數(shù)
*/ 
function quotes($content) 

//如果magic_quotes_gpc=Off,那么就開始處理 
if (!get_magic_quotes_gpc()) { 
//判斷$content是否為數(shù)組 
if (is_array($content)) { 
//如果$content是數(shù)組,那么就處理它的每一個單無 
foreach ($content as $key=>$value) { 
$content[$key] = addslashes($value); 

} else { 
//如果$content不是數(shù)組,那么就僅處理一次 
addslashes($content); 

} else { 
//如果magic_quotes_gpc=On,那么就不處理 

//返回$content 
return $content; 

?>

關于怎么在PHP項目中防止注入攻擊就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

php
AI