2014-10-02 113 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证书?通过这样做,你不仅确保你有一个安全的字符串插入,而且还有一个有效的密钥。