Есть ли возможность SQL-инъекции даже при использовании функции mysql_real_escape_string() ? Рассмотрим эту ситуацию с образцом. SQL построен на PHP следующим образом: $login = mysql_real_escape_string(GetFromPost('login')); $password = mysql_real_escape_string(GetFromPost('password')); $sql = "SELECT * FROM table WHERE login='$login' AND password='$password'"; Я слышал, что многие люди говорят мне, что такой код по-прежнему опасен и может быть mysql_real_escape_string() даже при […]
Я mysql_* свой код от использования mysql_* до PDO . В моем коде у меня был mysql_real_escape_string() . Что эквивалентно этому в PDO?
Я прочитал это раньше «вход фильтра, выход выхода», но является ли фильтрация ввода действительно необходимым, когда я использую PDO с PHP? Я думал, что с PDO мне не нужно фильтровать входные данные, потому что подготовленный оператор заботится о SQL-инъекциях. Я думаю, что «выход выхода» по-прежнему действителен, но «вход фильтра» по-прежнему действителен?
Ранее сегодня был задан вопрос относительно стратегий проверки ввода в веб-приложениях . Главный ответ, на момент написания, предлагает в PHP просто использовать htmlspecialchars и mysql_real_escape_string . Мой вопрос: это всегда достаточно? Больше мы должны знать? Где эти функции ломаются?
Вопрос : предотвращает ли XSS (межсайтовый скриптинг) простое использование strip_tags для любых сохраненных полей ввода и запускает htmlspecialchars для любого отображаемого вывода … и предотвращает SQL Injection с помощью подготовленных инструкций PHP PDO? Вот пример: // INPUT: Input a persons favorite color and save to database // this should prevent SQL injection ( by using […]
Я изучаю SQL-инъекцию и пробовал в своем PHP-коде этот запрос: $condition = str_replace(["'","\\"],["\\'","\\\\"], @$_GET['q']); $query = "SELECT * FROM dummy_table WHERE dummy_column = '$condition'"; DB и таблица charset установлены в UTF8. Я не могу ничего вводить, может кто-нибудь мне помочь? EDIT: Как указывал GarethD, это сработало бы первым 'и чем \, разрешив инъекцию, как насчет […]
Предположим, у меня такой код: $dbh = new PDO("blahblah"); $stmt = $dbh->prepare('SELECT * FROM users where username = :username'); $stmt->execute( array(':username' => $_REQUEST['username']) ); Документация PDO гласит: Параметры для подготовленных операторов не обязательно должны указываться; драйвер обрабатывает его для вас. Это действительно все, что мне нужно сделать, чтобы избежать инъекций SQL? Неужели это так просто? […]
У меня есть следующий код: function dbPublish($status) { global $dbcon, $dbtable; if(isset($_GET['itemId'])) { $sqlQuery = 'UPDATE ' . $dbtable . ' SET active = ? WHERE id = ?'; $stmt = $dbcon->prepare($sqlQuery); $stmt->bind_param('ii', $status, $_GET['itemId']); $stmt->execute(); $stmt->close(); } } Нужно ли мне в mysql_real_escape_string в этом случае, или я в порядке?
Поэтому я пытаюсь реплицировать SQL Injection второго порядка. Вот пример шаблона из двух php-сайтов, которые я подготовил. Давайте просто назовем это регистрационной формой избирателя. Пользователь может зарегистрироваться, а затем вы можете проверить, являетесь ли вы зарегистрированным избирателем или нет. insert.php <?php $db_selected = mysql_select_db('canada',$conn); if (!db_selected) die("can't use mysql: ". mysql_error()); $sql_statement = "INSERT into […]
Это делается для создания ресурса обучения сообщества . Цель состоит в том, чтобы иметь примеры хорошего кода, которые не повторяют ужасных ошибок, которые так часто можно найти в скопированном / вставленном PHP-коде. Я попросил его сделать Community Wiki. Это не означает соревнование по кодированию. Речь идет не о том, чтобы найти самый быстрый или самый […]