Чтобы защитить от SQL-инъекции, клиенты могут использовать языковые API MongoDB. Таким образом, все входные данные являются простыми значениями - команды не могут быть введены. Пример Java:
collection.find(Filters.eq("key", "input value"))
Недостатком является то, что вы не можете легко проверить свой фильтр. Вы не можете скопировать его в оболочку Монго и проверить его. Особенно проблематично с более крупными, более сложными фильтрами / запросами.
НО !!! есть также API, чтобы не использовать API фильтра - позволяющий анализировать любой json-фильтр. Пример Java ниже:
collection.find(BasicDBObject.parse("{key: "input value"}"));
Это хорошо, потому что вы можете скопировать фильтр непосредственно в оболочку MongoDB, чтобы проверить его.
НО !!! (последнее, но, я обещаю), это склонно к инъекции NoSql. Пример Java, где входное значение {$gt: ""}
.
collection.find(BasicDBObject.parse("{key: {$gt: ""}}"));
В этом последнем примере все возвращается, хотя мы имели в виду только для возврата определенных записей.
См. здесь более подробное объяснение SQL-инъекции при непосредственном использовании фильтров.
Последнее. Я думаю, что есть способ использовать оба необработанных фильтра и по-прежнему защищать от SQL-инъекций. Например, в Java мы можем использовать параметризованные запросы Jongo .
Если Ваш input
находится в form
, и Вы хотите получить значение после того, как утверждают, что можно сделать как [1 124]
<form onsubmit="submitLoginForm(event)">
<input type="text" name="name">
<input type="password" name="password">
<input type="submit" value="Login">
</form>
<script type="text/javascript">
function submitLoginForm(event){
event.preventDefault();
console.log(event.target['name'].value);
console.log(event.target['password'].value);
}
</script>
Преимущество этого пути: Пример Ваша страница имеет 2 form
для входа sender
и receiver
информация.
, Если Вы не используете form
для, получают значение затем
- можно установить 2 различных id
(или tag
или name
...) для каждого поля как [1 110] и receiver-name
, sender-address
и receiver-address
...
- Если Вы устанавливаете то же значение для 2 входов, затем после getElementsByName
(или getElementsByTagName
...) необходимо помнить 0, или 1 sender
или receiver
. Позже при изменении порядка 2 form
в HTML необходимо проверить этот код снова
, Если Вы используете form
, затем можно использовать name
, address
...