Как я должен санировать вход базы данных в Java?

Вам нужно будет base64 кодировать байты изображения, которые вы получаете из базы данных, а затем отображать изображение, используя байты base64.

Таким образом, вы можете сделать что-то вроде следующего:

var base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(arrayBuffer)));

Где arrayBuffer - буфер байтов, как только вы получили строку base64, вы можете установить ее в публичную переменную , Имейте в виду, что вам нужно добавить заголовок к строке base64. Таким образом, если ваша общедоступная переменная называется image, вам нужно будет сделать следующее:

this.image = 'data:image/jpeg;base64,' + base64String

Как только вы это сделаете, вы можете отобразить iamge, используя следующий тег:

<img id="image" [src]="image" >
13
задан Geo 26 March 2009 в 22:40
поделиться

5 ответов

Вы определенно хотите использовать PreparedStatements. Они удобны. Вот пример.

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

Используйте PreparedStatement вместо Оператора

7
ответ дан 1 December 2019 в 20:57
поделиться

Обычно, Вы не должны создавать вход конкатенации запроса, но использование PreparedStatement вместо этого.

Это позволяет Вам указать, в которых местах Вы будете устанавливать свои параметры в Вашем запросе, таким образом, Java будет заботиться об очистке всех исходных данных для Вас.

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

PreparedStatement? Да, абсолютно. Но я думаю, что существует еще один шаг: проверка входа от UI и связывающий с объектами до нахождения рядом с базой данных.

Я вижу, где привязка Строки в PreparedStatement могла бы все еще оставить Вас уязвимыми для атаки с использованием кода на SQL:

String userInput = "Bob; DELETE FROM FOO";
String query = "SELECT * FROM FOO WHERE NAME = ?";

PreparedStatement ps = connection.prepareStatement(query);
ps.setString(1, userInput);
ps.executeQuery();

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

Я рекомендовал бы делать его с обязательным API Spring.

3
ответ дан 1 December 2019 в 20:57
поделиться

Ваш ввод данных пользователем должен был бы на самом деле быть "Bob'; delete from foo; select '" (или что-то как этот), таким образом, неявные кавычки, добавленные подготовленным оператором, были бы закрыты:

SELECT * FROM FOO WHERE NAME = 'Bob'; delete from foo; select ''

но если Вы сделаете это, то подготовленный код оператора заключит Вашу кавычку в кавычки, таким образом, Вы получите фактический запрос

SELECT * FROM FOO WHERE NAME = 'Bob''; delete from foo; select '''

и Ваше имя было бы сохранено как "Bob', delete from foo; select '" вместо того, чтобы выполнить несколько запросов.

3
ответ дан 1 December 2019 в 20:57
поделиться
Другие вопросы по тегам:

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