У меня есть опыт в обеспечении SQL-инъекций на MYSQL, но что я должен делать осторожным в MongoDB, используя php-драйвер? На большинстве страниц я получаю данные через GET / POST и поиск / вставку системы. Я ищу через UDID / другие поля и могу вставить любое строковое значение. Также я получаю файлы cookie пользователя через javascript.
Итак, когда GET / POST, я добавляю к каждой переменной htmlentities функцию?
Что заменит mysql_real_escape_string? Должен ли я использовать его?
Так, например, когда
$download = array( 'url' => $_GET['url'] ); $downloads->insert($download);
Это нормально?
Есть ли способ проверить, действительно ли строка является UID?
Любые думают еще, что я должен знать при использовании MongoDB и PHP? Я получаю свои файлы cookie с помощью javascript и выполняю поиск в своей БД с помощью файлов cookie. Что об этом?
Итак, когда 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, таких как идентификаторы пользователей, пароли и т. Д., Так как их можно легко отгладить и использовать для доступа к частям вашего приложения, которые должны быть ограничены, или выдавать себя за других пользователей ,
Кстати, я думаю, что что-то пропустили, например
yourdomain.com/login?username=admin&passwd[$ne]=1
В Sql это выглядит так:
SELECT * FROM collection WHERE username="admin", AND passwd!=1
Я знаю, что это оправдано, чтобы избежать этих ограничений, чтобы узнать, какой тип данных вы ожидаете, и бросить его. Надеюсь, что ответ был полезен
Да, вам нужно бежать!
Представьте себе такой код:
<?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);