Вы можете написать ниже запрос
db.student.aggregate([
{ $match : {'name': "Rahul" }},
{ $project :{"marks":1} }
])
Мои рекомендации:
Затем вы можете сделать что-то вроде:
$pdo_obj = new PDO( 'mysql:server=localhost; dbname=mydatabase',
$dbusername, $dbpassword );
$sql = 'SELECT column FROM table WHERE condition=:condition';
$params = array( ':condition' => 1 );
$statement = $pdo_obj->prepare( $sql,
array( PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY ) );
$statement->execute( $params );
$result = $statement->fetchAll( PDO::FETCH_ASSOC );
PRO:
Минусы:
Ответ Хавьера, имеющий ссылку owasp, является хорошим началом.
Есть еще несколько вещей, которые вы можете сделать больше:
Что касается атак с использованием SQL-инъекций, вы можете написать функцию, которая удалит из ввода общие операторы SQL, такие как «DROP» или «DELETE * WHERE», например:
* $ sqlarray = array («DROP», « или 1 = 1 "," выбор объединения "," SELECT * FROM "," выбрать хост "," создать таблицу "," ОТ пользователей "," пользователи, ГДЕ "); *
Затем напишите функцию, которая проверит ваш ввод по этому массиву. Убедитесь, что какие-либо вещи внутри $ sqlarray не будут общими для ваших пользователей. (Не забудьте использовать strtolower, спасибо, lou).
Я не уверен, работает ли memcache с PHP 4, но вы можете установить некоторую защиту от спама с помощью memcache, разрешив только определенный удаленный IP-доступ к Страница process.php X количество раз за период Y.
Привилегии важны. Если вам нужны только привилегии на вставку (скажем, обработка заказа), вам следует войти в базу данных на странице процесса заказа с пользователем, у которого есть только вставка, и, возможно, выбрать привилегии. Это означает, что даже если SQL-инъекция прошла, они могли выполнять только запросы INSERT / SELECT, а не удалять или реструктурировать.
Поместите важные файлы обработки php в каталог, такой как / include. Затем запретите всем IP-адресам доступ к этому каталогу / include.
Поместите соленый MD5 с агентом пользователя + remoteip + ваша соль в сеанс пользователя и заставьте его проверять на каждой загрузке страницы, что правильный MD5 находится в их cookie.
Запретить определенные заголовки ( http: //www.owasp.org/index.php/Testing_for_HTTP_Methods_and_XST). Запретить PUT (если вам не нужны загрузки файлов) / TRACE / CONNECT / DELETE заголовки.
Я не уверен, что есть что-то, что фактически обратит порядок поиска как таковой, но в зависимости от ваших требований вы можете посмотреть перенаправление привязки сборки , которое дает Вы достаточно много можете контролировать, какие версии сборок загружаются.
Извините, я не могу предоставить больше информации, ориентированной на PHP, но надеюсь, что это поможет.AFAIK, PHP / mySQL обычно не имеет параметризованных запросов.
Использование sprintf ()
с mysql_real_escape_string ()
должно работать довольно хорошо , Если вы используете соответствующие строки формата для sprintf ()
(например, «% d» для целых чисел), вы должны быть в безопасности.
I may be wrong, but shouldn't it be enough to use mysql_real_escape_string
on user provided data?
unless when they are numbers, in which case you should make sure they are in fact numbers instead by using for example ctype_digit
or is_numeric
or sprintf
(using %d
or %u
to force input into a number).
Also, having a serarate mysql user for your php scripts that can only SELECT, INSERT, UPDATE and DELETE is probably a good idea...
Example from php.net
Example #3 A "Best Practice" query
Using mysql_real_escape_string() around each variable prevents SQL Injection. This example demonstrates the "best practice" method for querying a database, independent of the Magic Quotes setting.
The query will now execute correctly, and SQL Injection attacks will not work.
0) { echo "Товар вставлен \ n"; } } } еще { echo "Заполните форму правильно \ n"; }
Используйте хранимые процедуры для любого действия, связанного с записью в БД, и используйте параметры связывания для всех выборов.