Защита Внедрения SQL - Бросок от строки до интервала

Я не парень Java, но OpenCV является большим для моих потребностей. Не уверенный, если это соответствует Вашему. Вот порт Java, я думаю: http://docs.opencv.org/2.4/doc/tutorials/introduction/desktop_java/java_dev_intro.html

8
задан Welbog 8 September 2009 в 14:54
поделиться

4 ответа

Я не эксперт, но я достаточно уверен, что это будет безопасно.

Но зачем рисковать? Используйте параметризованный SQL, и вам никогда не придется об этом беспокоиться.

Кроме того, параметризация вашего SQL имеет другие преимущества, а не только защиту от инъекций.

10
ответ дан 5 December 2019 в 12:10
поделиться

Вероятно , но стоит проверить.

Что касается ответа Ричарда, у меня иногда возникали проблемы с тем, что IsNumeric () был немного более либеральным в том, что он будет принимать в качестве действительного числа, чем фактический CAST в числовой (на самом деле, это зависит от настроек локализации). Такие вещи, как «-0», «3E-5», «5.000.000» иногда удовлетворяют IsNumeric, но не приводят должным образом. Так что я обычно делаю полную попытку, вместо этого ловлю фактический оператор приведения.

1
ответ дан 5 December 2019 в 12:10
поделиться

Если строка была допустимым числом до того, как вы преобразовали ее в целое число, да, это безопасно. Но вы должны убедиться, что это действительное целое число, прежде чем преобразовывать его в int.

Я не знаю, какой язык на стороне сервера вы используете, но в PHP вы можете использовать функцию is_numeric (). Например:

$strYouExpectToBeInt = $_POST['id'];
try {
    if (false === is_numeric($strYouExpectToBeInt)) {
        throw new Exception('id is not a numeric string or a number');
    }
    $strYouExpectToBeInt = (int)$strYouExpectToBeInt;
    if (false === is_int($strYouExpectToBeInt)) {
        throw new Exception('id is not a valid integer');
    }

    // everything is ok, you can use $strYouExpectToBeInt
    // in SQL query now

} catch  (Exception $e) {
    echo $e->getMessage();
}
2
ответ дан 5 December 2019 в 12:10
поделиться

Это безопасно с точки зрения предотвращения внедрения sql, но не совсем хорошая идея, так как вы получаете исключение , которого всегда следует избегать по возможности, поскольку исключения стоят дорого. Вы действительно должны правильно дезинфицировать ввод. И, конечно же, пользователь может изменить значение в любом диапазоне в пределах значения int32.

1
ответ дан 5 December 2019 в 12:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: