2012-01-21 3 views
9

У меня есть опыт обеспечения безопасности SQL-запросов на MYSQL, но что я должен делать осторожным в MongoDB, используя php-драйвер? На большинстве страниц я получаю данные через GET/POST и поиск/вставку системы. Я ищу через UDID/другие поля и могу вставить любое строковое значение. Также я получаю файлы cookie пользователя через javascript.Проблемы с безопасностью при использовании драйвера PHP MongoDB

  1. Итак, когда GET/POST, я добавляю к каждой переменной функции htmlentities?

  2. Что заменит mysql_real_escape_string? Должен ли я использовать его?

Так, например, при выполнении

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

$downloads->insert($download); 

ли это?

  1. Есть ли способ проверить, действительно ли строка является UID?

  2. Любые мыслить еще, что я должен знать при использовании MongoDB и PHP? Я получаю свои файлы cookie с помощью javascript и выполняю поиск в своей БД с помощью файлов cookie. Что об этом?

ответ

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 

Любой думаю, что еще я должен знать при использовании MongoDB и PHP? Я получаю свои файлы cookie с помощью javascript и выполняю поиск в своей БД с помощью файлов cookie. Что об этом?

Не так много. Что касается любого веб-приложения, вам очень не рекомендуется хранить конфиденциальные данные в файлах cookie, таких как идентификаторы пользователей, пароли и т. Д., Так как их можно легко отгладить и использовать для доступа к частям вашего приложения, которые должны быть ограничены, или выдавать себя за других пользователей ,

+0

упс, удалить UDID, я имел в виду UID (_id) ... –

+0

Фиксированный как здесь и в вашем вопросе. :) – netcoder

+0

Большое спасибо! Это здорово. Так, например, при выполнении $ download = array ( 'url' => $ _GET ['url'] ); $ Downloads-> вставить ($ скачать); В порядке? –

1

Btw я думаю, что что-то упущено, например

yourdomain.com/login?username=admin&passwd[$ne]=1 

В Sql это выглядит так

SELECT * FROM collection 
    WHERE username="admin", 
    AND passwd!=1 

Путь я знаю, действует, чтобы избежать этой sutiations, чтобы знать, какой тип данных вы ожидать и бросить его. Надеюсь, что ответ был полезен

0

Да, вам нужно бежать!

Представьте код так:

<?php 
$login = $users->findOne([ 
    'user_id' => $_GET['uid'], 
    'password' => $_GET['password'] 
]); 
?> 

И просьба:

https://example.com/login?uid=3&password[$neq]=xxx 

Это будет проходить вход !!
Вы должны преобразовать значения GET/POST в строку.
Нет необходимости экранировать кавычки и т.д.

В вашем случае, чтобы предотвратить массивы как 'URL':

$download = array('url' => (string)$_GET['url']); 
$downloads->insert($download); 
Смежные вопросы