Внимание: примерный код этого ответа (например, примерный код вопроса) использует расширение PHP
mysql
, которое устарело в PHP 5.5.0 и полностью удалено в PHP 7.0.0.Если вы используете последнюю версию PHP, опция
mysql_real_escape_string
, описанная ниже, больше не будет доступна (хотяmysqli::escape_string
является современным эквивалентом). В настоящее время опцияmysql_real_escape_string
имеет смысл только для устаревшего кода на старой версии PHP.У вас есть два варианта - экранирование специальных символов в вашем
unsafe_variable
или использование параметризованный запрос. Оба будут защищать вас от SQL-инъекций. Параметрированный запрос считается лучшей практикой, но для его использования потребуется переходить на более новое расширение mysql в PHP.Мы рассмотрим нижнюю строку удара, которая будет первой.
//Connect $unsafe_variable = $_POST["user-input"]; $safe_variable = mysql_real_escape_string($unsafe_variable); mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')"); //Disconnect
См. также информацию о функции
mysql_real_escape_string
.Чтобы использовать параметризованный запрос, вам нужно использовать MySQLi , а не функции MySQL . Чтобы переписать ваш пример, нам понадобится что-то вроде следующего.
prepare("INSERT INTO table (column) VALUES (?)"); // TODO check that $stmt creation succeeded // "s" means the database expects a string $stmt->bind_param("s", $unsafe_variable); $stmt->execute(); $stmt->close(); $mysqli->close(); ?>
Ключевая функция, которую вы хотите прочитать, будет
mysqli::prepare
.Также, как предложили другие, вы можете сочтет полезным / легче повысить уровень абстракции с помощью чего-то вроде PDO .
Обратите внимание, что случай вы спросили об этом довольно просто, и что более сложные случаи могут потребовать более сложных подходов. В частности:
- Если вы хотите изменить структуру SQL на основе пользовательского ввода, параметризованные запросы не помогут, и требуемое экранирование не распространяется на
mysql_real_escape_string
. В этом случае вам лучше было бы пропускать вход пользователя через белый список, чтобы обеспечить доступ только «безопасных» значений.- Если вы используете целые числа от пользовательского ввода в состоянии и берете
mysql_real_escape_string
, вы столкнетесь с проблемой, описанной в Polynomial в комментариях ниже. Этот случай более сложный, поскольку целые числа не будут окружены кавычками, поэтому вы можете справиться, подтвердив, что пользовательский ввод содержит только цифры.- Есть, вероятно, другие случаи, о которых я не знаю. Вы можете найти , этот является полезным ресурсом для некоторых более тонких проблем, с которыми вы можете столкнуться.
Необходимо было установить JDK. Тогда можно посмотреть в JDK_INSTALL_DIR\src.zip
Для меня, это C:\Program Files\java\jdk1.6.0_11\
(зависит от текущей версии)
, Вы не должны получать специальную версию с открытым исходным кодом.
Существует несколько хороших ответов здесь на том, где получить источник. Но предостережение: я был бы осторожен о том, как Вы используете его (при использовании его просто для ссылки). документация API является единственным контрактом, Вы должны кодировать против и - то, что разработчики сохранят последовательными/неповрежденными между выпусками. Я не использовал бы источник, узнают детали реализации и затем кодируют мои приложения относительно тех деталей реализации, поскольку они могут измениться между выпусками.
Необходимо быть в состоянии видеть "Системную библиотеку JRE [jdk1.x.xxxx]" при рассмотрении Пути сборки Java проекта.
можно получить доступ к экрану конфигурации пути сборки проекта: щелчок правой кнопкой по проекту-> Путь Сборки-> Настраивает Путь Сборки... Необходимо быть в состоянии видеть запись Системной библиотеки JRE в нижней части списка.
самый легкий способ просмотреть источник для класса состоит в том, чтобы использовать "Открытый Тип" ярлык. Значение по умолчанию для этого ярлыка: Ctrl + Сдвиг + T ". Класс, который Вы ищете, должен появиться, поскольку Вы вводите, это - имя.
Можно перейти в http://openjdk.java.net/ и загрузить последние сборки openJDK проекта. Я думаю, что это должно дать Вам, в чем Вы нуждаетесь.
Если Вы не можете найти фактический источник, можно также использовать декомпилятор для регенерации источника из файла класса.
Лично я использую JAD, объединенный с плагином JADClipse для просмотра источника в Eclipse.
Когда вы кодируете в Eclipse, нажмите CTRL и щелкните любое имя базового класса Java в исходном коде. Eclipse теперь покажет экран, говорящий, что у вас не установлены исходные коды. Однако на этом экране есть ссылка «Присоединить источник ...». Щелкните эту ссылку и импортируйте файл src.zip из каталога установки JDK (src.zip). Это должно помочь