На мой взгляд, лучший способ вообще запретить SQL-инъекцию в вашем PHP-приложении (или любом веб-приложении, если на то пошло) - это думать о архитектуре вашего приложения. Если единственный способ защитить от SQL-инъекции - не забудьте использовать специальный метод или функцию, которая делает The Right Thing каждый раз, когда вы разговариваете с базой данных, вы делаете это неправильно. Таким образом, это просто вопрос времени, пока вы не забудете правильно отформатировать свой запрос в какой-то момент вашего кода.
Принятие шаблона MVC и структуры, такой как CakePHP или CodeIgniter - это, вероятно, правильный путь: общие задачи, такие как создание безопасных запросов к базе данных, были решены и централизованно реализованы в таких рамках. Они помогают организовать ваше веб-приложение разумным образом и заставляют вас больше думать о загрузке и сохранении объектов, а не о безопасном построении отдельных SQL-запросов.
К сожалению, 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()
, чтобы найти текущую кодировку по умолчанию и использовать соответствующий метод или перегрузку конструктора для определения его.
Я не могу ответить на Ваш исходный вопрос, но я хотел бы дать Вам, некоторый совет - не зависит от кодировки по умолчанию JVM. Всегда лучше явно определить желаемое кодирование (т.е. "UTF-8") в Вашем коде. Тем путем Вы знаете, что это будет работать даже через различные системы и конфигурации JVM.
Не ясный на том, что Вы делаете и не управлять в этой точке. Если можно вставить различный класс 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
, Если этот подход не выполним, может помочь, разъясняете ли Вы здесь точно, что Вы можете и не можете управлять с точки зрения потока данных и среды выполнения (хотя я знаю, что это иногда легче, сказал, чем решительный). Удача.
Я думаю лучший подход, чем установка набора символов платформы по умолчанию, тем более, что у Вас, кажется, есть ограничения на влияние на развертывание приложения, уже не говоря о платформе, должен назвать намного более безопасное String.getBytes("charsetName")
. Тем путем Ваше приложение не зависит от вещей вне своего управления.
я лично чувствую, что String.getBytes()
должен быть удержан от использования, поскольку это вызвало серьезные проблемы во многих случаях, которые я видел, где разработчик не объяснял набор символов по умолчанию, возможно изменяющийся.
От 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