Установка кодировки символов Java по умолчанию

На мой взгляд, лучший способ вообще запретить SQL-инъекцию в вашем PHP-приложении (или любом веб-приложении, если на то пошло) - это думать о архитектуре вашего приложения. Если единственный способ защитить от SQL-инъекции - не забудьте использовать специальный метод или функцию, которая делает The Right Thing каждый раз, когда вы разговариваете с базой данных, вы делаете это неправильно. Таким образом, это просто вопрос времени, пока вы не забудете правильно отформатировать свой запрос в какой-то момент вашего кода.

Принятие шаблона MVC и структуры, такой как CakePHP или CodeIgniter - это, вероятно, правильный путь: общие задачи, такие как создание безопасных запросов к базе данных, были решены и централизованно реализованы в таких рамках. Они помогают организовать ваше веб-приложение разумным образом и заставляют вас больше думать о загрузке и сохранении объектов, а не о безопасном построении отдельных SQL-запросов.

342
задан user7 3 July 2019 в 17:53
поделиться

5 ответов

К сожалению, file.encoding свойство должно быть определено, поскольку JVM запускает; к тому времени, когда Ваш основной метод вводится, кодировка символов, используемая String.getBytes() и конструкторы по умолчанию InputStreamReader и OutputStreamWriter, постоянно кэшировалась.

Как [1 110] Edward Grech указывает, в особом случае как это, переменная среды JAVA_TOOL_OPTIONS может использоваться для определения этого свойства, но это обычно делается как это:

java -Dfile.encoding=UTF-8 … com.x.Main

Charset.defaultCharset() отразит изменения в file.encoding свойство, но большая часть кода в базовых библиотеках Java, которые должны определить кодировку символов по умолчанию, не использует этот механизм.

, Когда Вы кодируете или декодируете, можно запросить file.encoding свойство или Charset.defaultCharset(), чтобы найти текущую кодировку по умолчанию и использовать соответствующий метод или перегрузку конструктора для определения его.

293
ответ дан Community 23 November 2019 в 00:33
поделиться

Я не могу ответить на Ваш исходный вопрос, но я хотел бы дать Вам, некоторый совет - не зависит от кодировки по умолчанию JVM. Всегда лучше явно определить желаемое кодирование (т.е. "UTF-8") в Вашем коде. Тем путем Вы знаете, что это будет работать даже через различные системы и конфигурации JVM.

18
ответ дан Marc Novakowski 23 November 2019 в 00:33
поделиться

Не ясный на том, что Вы делаете и не управлять в этой точке. Если можно вставить различный класс OutputStream на целевом файле, Вы могли бы использовать подтип OutputStream, который преобразовывает Строки в байты под набором символов, Вы определяете, говорите UTF-8 по умолчанию. Если изменено UTF-8 является suffcient для Ваших потребностей, можно использовать DataOutputStream.writeUTF(String):

byte inbytes[] = new byte[1024];
FileInputStream fis = new FileInputStream("response.txt");
fis.read(inbytes);
String in = new String(inbytes, "UTF8");
DataOutputStream out = new DataOutputStream(new FileOutputStream("response-2.txt"));
out.writeUTF(in); // no getBytes() here

, Если этот подход не выполним, может помочь, разъясняете ли Вы здесь точно, что Вы можете и не можете управлять с точки зрения потока данных и среды выполнения (хотя я знаю, что это иногда легче, сказал, чем решительный). Удача.

1
ответ дан Dov Wasserman 23 November 2019 в 00:33
поделиться

Я думаю лучший подход, чем установка набора символов платформы по умолчанию, тем более, что у Вас, кажется, есть ограничения на влияние на развертывание приложения, уже не говоря о платформе, должен назвать намного более безопасное String.getBytes("charsetName"). Тем путем Ваше приложение не зависит от вещей вне своего управления.

я лично чувствую, что String.getBytes() должен быть удержан от использования, поскольку это вызвало серьезные проблемы во многих случаях, которые я видел, где разработчик не объяснял набор символов по умолчанию, возможно изменяющийся.

38
ответ дан Jens 23 November 2019 в 00:33
поделиться

От JVMв „ў Интерфейс Инструмента к documentation†¦

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

установка By (Windows) переменная среды JAVA_TOOL_OPTIONS к -Dfile.encoding=UTF8, (Java) System свойство будет установлено автоматически каждый раз, когда JVM запускается. Вы будете знать, что параметр был взят, потому что следующее сообщение будет добавлено к System.err:

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8

165
ответ дан Edward Grech 23 November 2019 в 00:33
поделиться
Другие вопросы по тегам:

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