在將值插入到SQL查詢之前,在值上使用了一個散列值可以防止sql注入,甚至不需要使用mysql_real_escape_string? (假設你要爲你的整個網站做這個)加密是否防止sql注入?
編輯:具體目的是從用戶那裏獲取一個密鑰,並在將它與其他表中的哈希列進行比較之前進行哈希處理,然後檢索另一列哈希匹配的值。對不起,沒有指定
在將值插入到SQL查詢之前,在值上使用了一個散列值可以防止sql注入,甚至不需要使用mysql_real_escape_string? (假設你要爲你的整個網站做這個)加密是否防止sql注入?
編輯:具體目的是從用戶那裏獲取一個密鑰,並在將它與其他表中的哈希列進行比較之前進行哈希處理,然後檢索另一列哈希匹配的值。對不起,沒有指定
是的,但它也會使你的數據無用。 :P請記住,散列是單向的,所以你不能獲得有意義的數據。加密是兩種方式,這可能就是你的意思。
我認爲使用準備好的SQL語句是這種事情更廣泛接受的解決方案。見this question。
只要你的哈希輸出在mysql中沒有任何衝突的字符,那麼我肯定會說是的。 base64是做這種事的好方法
如果你正在考慮md5()或sha1(),你永遠無法解密散列。如果你有自己的加密算法,我會說去做。
是的,但是一旦散列了信息,就不能從散列中重新生成信息。改爲使用編碼方法。
此外,mysql_
*功能(或即將)不推薦使用。您應該考慮切換到mysqli
或PDO
。如果你是一個懶惰的屁股(像我一樣),你可以使用mysqli
程序風格,它幾乎與原來的mysql_
函數相同。
有趣我甚至從來沒有玩過msqli功能。感謝您的提示 – imkendal 2012-07-26 17:46:33
在我看來,我認爲你應該使用他們兩個,這裏有一個例子:
$em = mysql_real_escape_string($_REQUEST['email']);
$pw = mysql_real_escape_string($_REQUEST['password']);
at the insert you use the password($pw) function.
是的,但只有當你存儲密鑰進行加密並作爲哈希。我剛剛完成了一個tcl腳本。主要程序應該可以幫助你。 採取純文本密鑰和散列,也加密這個純文本密鑰,並存儲在您保存(也加密)的表格數據相同的行。
通過將密鑰列解密並插入框中,填充下拉列表或任何使用純文本密鑰的內容。現在您可以選擇純文本鍵進行搜索。
這需要一個加密,解密和哈希路由,每次你想要添加,更新,刪除記錄或顯示記錄時被調用,但我注意到沒有減慢,但我確信它存在於微秒級別。
請確保您的加密來自標準化和受尊重的來源,如openssl或類似的,所以你可以用自動填充和自動IV創建cbc。這種方式就像數據庫中的單詞被加密的方式不同。這也是爲什麼你需要散列密鑰。否則它會以不同的方式進行加密,而且你無法搜索任何東西。
通過這種方式,密鑰被散列並與其他哈希值進行檢查。嘗試在一個字段中插入惡意的單詞組,並且可能發生的麥芽汁被散列成非危險的單詞。
如果使用tcl,它也有助於使用大括號來防止問題開始
散列值與散列值相比有什麼價值?整個輸入的哈希相比什麼?我的意思是,你無法取回它,因爲*它是一個散列* – Alfabravo 2012-07-26 17:28:48
你的意思是例如:select * from table where'[hash data]'='A';? – hmmftg 2012-07-26 17:31:08
請花點時間瞭解[散列和加密之間的區別](http://stackoverflow.com/questions/4948322/fundamental-difference-between-hashing-and-encryption-algorithms)。 – 2012-07-26 17:35:16