使用MongoDB PHP驱动程序时的安全问题

Eli*_*zen 9 php security mongodb

我有在MYSQL上保护sql注入的经验,但是我应该在使用php驱动程序的MongoDB上小心一下?在大多数页面中,我通过GET/POST和搜索/插入系统获取数据.我通过UDID /其他字段搜索,并可以插入任何字符串值.我也通过javascript获取用户的cookie.

  1. 那么当GET/POST时,我是在添加每个变量htmlentities函数吗?

  2. 什么会取代mysql_real_escape_string?我应该用吗?

所以,例如,在做的时候

$download = array( 'url' => $_GET['url'] );

$downloads->insert($download); 
Run Code Online (Sandbox Code Playgroud)

这个可以吗?

  1. 有没有办法检查一个字符串是否真的是一个UID?

  2. 在使用MongoDB和PHP时我还应该注意吗?我确实使用javascript获取我的cookie,并使用cookie在我的数据库中搜索.那个怎么样?

net*_*der 5

那么当GET/POST时,我是在添加每个变量htmlentities函数吗?

没有必要.但是,您应该htmlentities在将用户生成的数据输出到浏览器时使用,以防止XSS攻击.

什么会取代mysql_real_escape_string?我应该用吗?

你不应该mysql_real_escape_string像MySQL一样使用它.在MongoDB上没有任何内容取代它,驱动程序负责为您转义数据.

有没有办法检查一个字符串是否真的是一个UID?

唯一的方法是验证它是用该字符串查询MongoDB并检查它是否存在.

但是,您可以验证格式是否正确:

$id = '4f1b166d4931b15415000000';
$a = new MongoId($id);
var_dump($a->{'$id'} == $id); // true

$id = 'foo';
$a = new MongoId($id);
var_dump($a->{'$id'} == $id); // false
Run Code Online (Sandbox Code Playgroud)

在使用MongoDB和PHP时我还应该注意吗?我确实使用javascript获取我的cookie,并使用cookie在我的数据库中搜索.那个怎么样?

不多.对于任何Web应用程序,您都不鼓励将敏感数据存储在Cookie中,例如用户标识符,密码等,因为它们可以轻松调整并用于访问应受限制的应用程序部分,或冒充其他用户.