2015-01-06 94 views
1

問題: 是否不是安全到typecast提交密碼到字符串? $ b =(string)$ a;php安全,typopast密碼到字符串

評論: 我不想知道更多高性能的方式,我只是想要一個安全的方式。只需以下用例:

第1步 - 註冊密碼(PW):

  1. 通過註冊獲取PW,
  2. 它轉換爲String
  3. 字符串哈希
  4. 保存散列MYSQL

第2步 - 登錄表單,得到PW:

  1. 通過表格
  2. 從數據庫
  3. 轉換爲String
  4. 獲得哈希比較兩個

我想這是最簡單的方式,但最安全的一個獲取PW。我想,讓每一個字符爲PW,

  • </{} *#

,爲什麼沒有亞洲的符號。 我想:這種方法不應該帶來轉義問題,因爲無論代碼是什麼,現在都是一個字符串,並且只與字符串進行比較。但我可以擁有每一個角色,沒有危險。 Mysql數據庫應該允許每個字符設置爲UTF8時,對嗎? 所以請回答我:這個想法是否簡單?

預先感謝您 格爾德

+3

保存散列會將存儲的密碼減少爲一組ASCII字符,但仍然允許任何/每個UTF-8字符作爲來自登錄表單的輸入 –

+0

但是,轉換爲字符串是無關緊要的,因爲來自HTML表單的所有輸入將是字符串數據 –

+2

與其擔心這一點,不如擔心使用最安全的算法來處理「字符串哈希」部分的邏輯:use [password_hash()](http://www.php.net/manual/en /function.password-hash.php)這也將確保它是一個生成的鹽漬散列 –

回答

1

我不相信鑄造密碼字符串會影響到你的應用程序,無論哪種方式的整體安全性。從這個意義上說,我認爲這個問題有點誤導。

作爲轉換爲字符串不會真正幫助您或傷害您的原因的一個示例,請考慮針對數據庫的最常見的攻擊向量之一:SQL注入。在一個接受用戶輸入的網頁上設置一個表單,將其發佈到服務器端腳本,該腳本使用該用戶輸入構建查詢,並且突然之間您很容易受到攻擊。由於所有SQL查詢都是字符串,因此如果您投射到字符串中,則此處不重要。

但是,如果你知道你需要一個表單(任何形式)的字符串,並且有人鍵入一個整數?試試這個..

做一個頁面,內容如下:

<!DOCTYPE html> 
<html> 
    <head><title></title></head> 
    <body> 
     <form method="POST" action="/test.php"> 
      <input type="text" name="testInput"> 
      <input type="submit"> 
     </form> 
    </body> 
</html> 

test.php,剛剛傾倒出來$_POST

<?php 
    var_dump($_POST); 

然後輸入一個整數到表單字段,看什麼類型的PHP吐出它。這是輸出我得到:

array (size=1) 
    'testInput' => string '5.25' (length=4) 

因爲它是不可能真正構建包含PHP對象POST(JSON本身只不過是一個字符串,直到它的解碼以上),我們真的只是擔心原生類型這裏。正如你上面看到的,即使PHP接收到它時,非字符串輸入也會被轉換爲字符串數據。

這不是關於數據來自何處,無論是來自表單還是腳本,它都是PHP如何接收它並使其可用。我可以用執行cURL請求並接收相同輸出的腳本的方式構造相同的'表單'。

+0

好吧,猜我同意它,因爲我早些時候做過GET。也許我有錯誤的想法,接下來嘗試:無論發生什麼事情都將毫無問題地散列 - 我只比較兩個哈希是正確的嗎?我認爲可能會發生這樣的情況,我會再次將其與惡意代碼串起來,並且一切都變得繁榮。是的,我感到困惑,因爲有這麼多的書面和如此多的危險。謝謝大家! – GGolem

+1

即使有人在密碼字段中提交了惡意代碼,你也會對它進行哈希處理,這將不可避免地改變該字符串的內容(希望這是一個好的哈希函數的目的)。一旦哈希與你的[最喜歡的算法](http://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords),是的只是比較散列與存儲在數據庫中的散列。如果它們相同,則用戶輸入正確的密碼。 –