2014-10-02 53 views
0

編輯:PHP如何逃生PGP公鑰用於插入數據庫

對於任何人想知道我到底是怎麼實現的時候,我意識到我應該不再是一個白癡,而是我現在把用戶輸入和導入進入鑰匙鏈。從導入中抽取將來用於簽名的指紋。

SEE:

如果它不是爲你工作,確保PHP/nginx的/阿帕奇有權到您的密鑰存儲在文件夾中。 (/home/you/.gnupg)

在我們的網站上,我們正在接受PGP公鑰以加密給用戶的電子郵件,直到現在我們還沒有因爲它仍然處於內部測試版而不願意轉義。

很顯然,當我們將它插入到數據庫中時,我們不想讓任何漏洞處於打開狀態,但是如何在保持密鑰完整性的同時將其轉義出來?

例公鑰:

-----BEGIN PGP PUBLIC KEY BLOCK----- 
Version: GnuPG v2.0.22 (MingW32) 

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 
=mi2n 
-----END PGP PUBLIC KEY BLOCK----- 
+0

它只是文本,這意味着它是一個字符串。將它填充到text/varchar字段中,就像其他任何文本一樣。如果你擔心charset損壞,請改爲使用blob字段。然後閱讀:http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – 2014-10-02 18:20:49

+1

它已經「轉義」到Base64,不是嗎?只需將它插入到您的查詢參數中,您就可以全部設置。 – 2014-10-02 18:20:57

+0

我的意思是說,因爲它是通過表單從用戶處獲得的,並且自動添加到數據庫中,所以必須將其轉義以防止發生任何SQL注入漏洞,是不是? – 2014-10-02 18:22:26

回答

0

如果參數,那麼你不必擔心逃避的。

$pgp = file_get_contents('mykey.pgp'); 

$dbh = new PDO($connstr,$username,$password); 

if(! $stmt = $dbh->prepare('INSERT INTO mytable (pgpkey) VALUES (?)')) { 
    die($dbh->errorInfo()); 
} 
if(! $stmt->execute(array($pgp))) { 
    die($stmt->errorInfo(); 
} 
echo 'great success.' 

這就是說,有包含在該鍵的單引號,所以你不應該有,只要你已經驗證了輸入擔心逃避它,。正如@邁克布蘭特在評論中提到的:

您是否考慮實際驗證所提供的PGP證書?通過這樣做,你不僅確保你有一個安全的字符串插入,而且還有一個有效的密鑰。