當前位置:外匯行情大全網 - 信用卡套現 - PHP如何做到最基本的安全防範?

PHP如何做到最基本的安全防範?

PHP如何做到最基本的安全防範?

Php給了開發者極大的靈活性,但也給安全問題帶來了潛在的隱患。PHP如何做到最基本的安全防範?我來為妳解答,希望能幫到妳!

在開發互聯網服務時,我們必須始終牢記安全的概念,並將其體現在開發的代碼中。PHP腳本語言並不關心安全性,尤其是對於大多數沒有經驗的開發者來說。每當妳談論任何涉及金錢事務的交易問題時,妳都需要特別註意安全問題,比如開發壹個論壇或購物車。

安全保護的壹般要點

不要相信形式

對於壹般的javascript前臺驗證,由於我們無法知道用戶的行為,比如關閉瀏覽器的Javascript引擎,惡意數據通過POST發送到服務器。它需要在服務器端進行驗證,以驗證傳遞給每個php腳本的數據,從而防止XSS攻擊和SQL註入。

不要相信用戶

假設妳的網站收到的每壹條數據都包含惡意代碼和隱藏的威脅,清理每壹條數據。

關閉全局變量

在php.ini文件中進行以下配置:

寄存器_全局=關

如果開啟這個配置選項,會有很大的安全隱患。例如,如果在process.php有壹個腳本文件,則接收到的數據將被插入到數據庫中,並且用於接收用戶輸入數據的形式可以如下:

& ltinput name = " username " type = " text " size = " 15 " maxlength = " 64 " >

這樣,當數據提交給process.php時,php將註冊壹個$username變量,將變量數據提交給process.php,並為任何POST或GET請求參數設置這樣壹個變量。如果初始化時沒有顯示,將會出現以下問題:

& lt?服務器端編程語言(Professional Hypertext Preprocessor的縮寫)

//僅當用戶通過身份驗證時,才定義authorized = true

如果

(已驗證用戶()){

$ authorized = true

}

?& gt

這裏假設authenticated_user函數是判斷$authorized變量的值。如果啟用了register_globals配置,任何用戶都可以發送請求,將$authorized變量的值設置為任何值,從而繞過這個驗證。所有這些提交的數據都要通過PHP預先定義的內置全局數組獲取,包括$_POST、$_GET、$_FILES、$_SERVER、$_REQUEST等。,其中$_REQUEST是$_GET/$_POST/$_COOKIE的三個數組的聯合變量,默認順序是$_COOKIE、$_POST和$。

推薦的安全配置選項

Error_reporting設置為Off:不向用戶公開錯誤信息,開發時可以設置為ON。

Safe_mode設置為Off。

Register_globals設置為Off

禁用以下函數:system、exec、passthru、shell_exec、proc_open和popen。

Open_basedir設置為/tmp,這樣可以存儲會話信息。同時設置個人網站根目錄expose_php為allow _ URL _ fopen為allow _ URL _ include為Off。

SQL註入攻擊

對於操作數據庫的SQL語句,要特別註意安全性,因為用戶可能會輸入特定的語句,使原來的SQL語句改變功能。類似於下面的例子:

$ SQL = " select * from pinfo where product = ' $ product ' ";

此時,如果用戶輸入的$product參數為:‘39’;降pinfo選擇“FOO

那麽最終的SQL語句將如下所示:

從pinfo中選擇產品,其中product = ' 39

降pinfo

選擇“FOO”

這會變成三條SQL語句,導致pinfo表被刪除,後果很嚴重。這個問題可以簡單地通過使用PHP的內置函數來解決:

$ SQL = ' Select * from pinfo where product = ' " ' MySQL _ real _ escape _ string($ product)。'"';

要防止SQL註入攻擊,我們需要做兩件事:始終鍵入驗證輸入參數,始終使用mysql_real_escape_string函數對單引號、雙引號、反引號等特殊字符進行轉義。不過根據開發經驗,不要在php中開啟魔術語錄,這個功能在php6中已經廢除了,需要的時候總要轉義。

防止基本的XSS攻擊

與其他攻擊不同,XSS攻擊是在客戶端進行的。最基本的XSS工具是防止javascript腳本在用戶提交的表單頁面上竊取用戶提交的數據和cookie。XSS工具比SQL註入更難保護。主要公司的網站都遭到了XSS的攻擊。雖然這種攻擊與php語言無關,但是可以利用php過濾用戶數據,達到保護用戶數據的目的。這裏主要用途是過濾用戶數據,壹般過濾掉HTML標簽,尤其是A標簽。以下是常用的過濾方法:

function transform_HTML( $string,$length null) { //有助於防止XSS攻擊

//去除死空間。

$ string = trim($ string);

//防止潛在的Unicode編碼問題。

$ string = utf8 _ decode($ string);

HTML化特定於HTML的字符。

$string = htmlentities( $string,ENT _ no quotes);

$string = str_replace ( "# "," # ",$ string);

$string = str_replace ( "% "," ",$ string);

$ length = intval($ length);

if($length & gt;0) {

$string = substr ( $string,0,$ length);

} return $ string

}

這個函數將HTML的特殊字符轉換成HTML實體,瀏覽器在呈現時將這個文本顯示為純文本。例如,粗體將顯示為:粗體文本。上述函數的核心是htmlentities函數,該函數將html特殊標記轉換為html實體字符,從而可以過濾大多數XSS攻擊。但對於經驗豐富的XSS攻擊者來說,還有更巧妙的攻擊方式:用十六進制或utf-8編碼他們的惡意代碼,而不是普通的ASCII文本,例如,用下面的方式:

這個瀏覽器渲染的結果實際上是:

& lta href = "/safehtml/?Page=SafeHTML下載最新的SafeHTML。

2.將文件放入服務器的classes目錄,其中包含所有SafeHTML和HTMLSax庫。

3.在您自己的腳本中包含SafeHTML類文件。

4.創建SafeHTML對象。

5.使用parse方法進行篩選。

& lt?php/*如果您將HTMLSax3.php存儲在/classes目錄中,那麽

使用safehtml.php腳本,將XML_HTMLSAX3定義為空字符串。*/define(XML_HTMLSAX3,' ');//包含類file . require _ once(' classes/safe html . PHP ');

//定義壹些樣本壞代碼。

$data =該數據將引發警報

" ;//創建safehtml對象。$ safe html = new safe html();//解析和整理數據。$ safe _ data = $ safe html-& gt;parse($ data);//顯示結果。echo“清除的數據是”。$ safe _ data

?& gt

SafeHTML不能完全防止XSS攻擊,但它只是壹種相對復雜的腳本檢查方式。

使用單向哈希加密來保護數據。

單向哈希加密確保每個用戶的密碼都是唯壹的,無法被破譯。只有最終用戶知道密碼,系統不知道原始密碼。這樣做的壹個好處是,系統被攻擊後,攻擊者無法知道原來的密碼數據。加密和哈希是兩個不同的過程。與加密不同,哈希不能被解密,是單向的;同時,兩個不同的字符串可能得到相同的哈希值,不能保證哈希值的唯壹性。MD5函數處理的哈希值幾乎無法破解,但總是有可能的,網上也有MD5哈希字典。

使用mcrypt加密數據MD5哈希函數可以以可讀的形式顯示數據,但是在存儲用戶的信用卡信息時,需要加密存儲,然後解密。最好的方法是使用mcrypt模塊,它包含30多種加密方法,確保只有加密器才能解密數據。

& lt?php$data = "妳想要加密的東西";

$key = "用於加密您的數據的秘密密碼";

$ cipher = " MCRYPT _ SERPENT _ 256 " $ MODE = " MCRYPT _ MODE _ CBC ";function encrypt( $data,$key,cipher,$mode){//Encrypt data return(string)base64 _ Encrypt(cipher,substr (md5( $key),0,mcrypt_get_key_size( $cipher,$mode)),$data,$ mode,substr (md5( $key),0,mcrypt_get_block_size( $cipher,$ mode)));

}function decrypt( $data,$key,$cipher,$mode ) {//解密數據

return(string)mcrypt _ decrypt($ cipher,substr (md5( $key),0,mcrypt_get_key_size( $cipher,$mode))、base64_decode ( $data),$mode,substr (md5( $key),0,mcrypt_get_block_size( $cipher,$ mode));

}?& gt

mcrypt函數需要以下信息:

1,要加密的數據

2.用於加密和解密數據的密鑰

3.特定算法(密碼:

比如MCRYPT_TWOFISH192。

,麥克裏普_蛇_256,麥克裏普_RC2

,MCRYPT_DES

,以及MCRYPT_LOKI97

)

4.用於加密的模式

5.加密種子是用於啟動加密過程的數據,是用於初始化加密算法的額外二進制數據。

6.加密密鑰和種子的長度,可以使用mcrypt_get_key_size函數和mcrypt_get_block_size函數獲得。如果數據和密鑰都被盜,攻擊者就可以遍歷密碼找到打開線路的方法,所以我們需要對加密的密鑰進行壹次MD5來確保安全性。同時,由於mcrypt函數返回的加密數據是二進制數據,將其保存在數據庫字段中會引起其他錯誤。base64encode用於將這些數據轉換為十六進制數,以便於存儲。

  • 上一篇:如何查詢廣發銀行信用卡的有效期?
  • 下一篇:平安銀行信用卡怎麽樣好不好
  • copyright 2024外匯行情大全網