php安全篇1

sql注入防御

  echo htmlspecialchars($str, ENT_QUOTES); // 轉(zhuǎn)換雙引號和單引號

  $username= mysql_real_escape_string($username);

最好兩者結(jié)合使用!
再有! <b>一定要預(yù)處理,一定要預(yù)處理,一定要預(yù)處理!</b>

xss攻擊防御

使用SafeHTML防止XSS攻擊

上述關(guān)于XSS攻擊的防護(hù)非常簡單,但是不包含用戶的所有標(biāo)記,同時(shí)有上百種繞過過濾函數(shù)提交javascript代碼的方法,也沒有辦法能完全阻止這個(gè)情況。

目前,沒有一個(gè)單一的腳本能保證不被攻擊突破,但是總有相對來說防護(hù)程度更好的。一共有兩個(gè)安全防護(hù)的方式:白名單和黑名單。其中白名單更加簡單和有效。

一種白名單解決方案就是SafeHTML,它足夠智能能夠識別有效的HTML,然后就可以去除任何危險(xiǎn)的標(biāo)簽。這個(gè)需要基于HTMLSax包來進(jìn)行解析。

安裝使用SafeHTML的方法:
1、前往 SafeHTML 下載最新的SafeHTML
2、將文件放入服務(wù)器的classes 目錄,這個(gè)目錄包含所有的SafeHTML和HTMLSax庫
3、在自己的腳本中包含SafeHTML類文件
4、建立一個(gè)SafeHTML對象
5、使用parse方法進(jìn)行過濾

<?php /* If you're storing the HTMLSax3.php in the /classes directory, along with the safehtml.php script, define XML_HTMLSAX3 as a null string. */ define(XML_HTMLSAX3, ''); // Include the class file. require_once('classes/safehtml.php'); // Define some sample bad code. $data = "This data would raise an alert <script>alert('XSS Attack')</script>"; // Create a safehtml object. $safehtml = new safehtml(); // Parse and sanitize the data. $safe_data = $safehtml->parse($data); // Display result. echo 'The sanitized data is <br />' . $safe_data; ?>

SafeHTML并不能完全防止XSS攻擊,只是一個(gè)相對復(fù)雜的腳本來檢驗(yàn)的方式。

使用單向HASH加密方式來保護(hù)數(shù)據(jù)
單向hash加密保證對每個(gè)用戶的密碼都是唯一的,而且不能被破譯的,只有最終用戶知道密碼,系統(tǒng)也是不知道原始密碼的。這樣的一個(gè)好處是在系統(tǒng)被攻擊后攻擊者也無法知道原始密碼數(shù)據(jù)。

加密和Hash是不同的兩個(gè)過程。與加密不同,Hash是無法被解密的,是單向的;同時(shí)兩個(gè)不同的字符串可能會得到同一個(gè)hash值,并不能保證hash值的唯一性。

MD5函數(shù)處理過的hash值基本不能被破解,但是總是有可能性的,而且網(wǎng)上也有MD5的hash字典。

使用mcrypt加密數(shù)據(jù)
MD5 hash函數(shù)可以在可讀的表單中顯示數(shù)據(jù),但是對于存儲用戶的信用卡信息的時(shí)候,需要進(jìn)行加密處理后存儲,并且需要之后進(jìn)行解密。
最好的方法是使用mcrypt模塊,這個(gè)模塊包含了超過30中加密方式來保證只有加密者才能解密數(shù)據(jù)。

<?php $data = "Stuff you want encrypted"; $key = "Secret passphrase used to encrypt your data"; $cipher = "MCRYPT_SERPENT_256"; $mode = "MCRYPT_MODE_CBC"; function encrypt($data, $key, $cipher, $mode) { // Encrypt data return (string) base64_encode ( mcrypt_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) { // Decrypt data 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)) ); } ?>

mcrypt函數(shù)需要以下信息:

1、待加密數(shù)據(jù)

2、用來加密和解密數(shù)據(jù)的key
3、用戶選擇的加密數(shù)據(jù)的特定算法(cipher:如 MCRYPT_TWOFISH192,MCRYPT_SERPENT_256, MCRYPT_RC2, MCRYPT_DES, and MCRYPT_LOKI97)
4、用來加密的模式
5、加密的種子,用來起始加密過程的數(shù)據(jù),是一個(gè)額外的二進(jìn)制數(shù)據(jù)用來初始化加密算法
6、加密key和種子的長度,使用mcrypt_get_key_size函數(shù)和mcrypt_get_block_size函數(shù)可以獲取

如果數(shù)據(jù)和key都被盜取,那么攻擊者可以遍歷ciphers尋找開行的方式即可,因此我們需要將加密的key進(jìn)行MD5一次后保證安全性。同時(shí)由于mcrypt函數(shù)返回的加密數(shù)據(jù)是一個(gè)二進(jìn)制數(shù)據(jù),這樣保存到數(shù)據(jù)庫字段中會引起其他錯誤,使用了base64encode將這些數(shù)據(jù)轉(zhuǎn)換為了十六進(jìn)制數(shù)方便保存。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 概述 之前一直對加密相關(guān)的算法知之甚少,只知道類似DES、RSA等加密算法能對數(shù)據(jù)傳輸進(jìn)行加密,且各種加密算法各有...
    Henryzhu閱讀 3,222評論 0 14
  • 1、不安全的隨機(jī)數(shù)生成,在CSRF TOKEN生成、password reset token生成等,會造成toke...
    nightmare丿閱讀 3,998評論 0 1
  • 本文主要介紹移動端的加解密算法的分類、其優(yōu)缺點(diǎn)特性及應(yīng)用,幫助讀者由淺入深地了解和選擇加解密算法。文中會包含算法的...
    蘋果粉閱讀 11,679評論 5 29
  • XXXphp給了開發(fā)者極大的靈活性,但是這也為安全問題帶來了潛在的隱患,近期需要總結(jié)一下以往的問題,在這里借翻譯一...
    柏樹_Jeff閱讀 372評論 0 2
  • EBV是一個(gè)會傳染的病毒,在人與人之間傳播,發(fā)生在世界各地。感染的原因通常是通過體液密切人與人之間的聯(lián)系,尤其是唾...
    iBo的大橘子閱讀 1,370評論 0 49

友情鏈接更多精彩內(nèi)容