Intereting Posts
Две формы – одна кнопка отправки? Почему этот запрос показывает только один результат? Является ли это поведение php где-то в руководстве? (строки с сопоставлением нулей) Неустранимая ошибка: допустимый размер памяти с помощью Drupal как изменить имя переменной php в цикле? Кэширование PHP (HTML + PHP) Имена заголовков с символами подчеркивания игнорируются в php 5.5.1 / apache 2.4.6 Zend Framework Выберите объекты и UNION () Обработка больших наборов данных через AJAX не приносит никаких преимуществ по скорости Как создать первый PHP-расширение в C на Linux GCC? Проблема с Imagick, а также с phmagick: делегат Postscript не удалось / Нет такого файла или каталога Удалить строку содержит определенные слова / фразы с помощью PHP как я могу решить "Устаревшие: функция eregi () устарела" ошибка Как поместить проверку ошибок для simplexml_load_file? 500 Ошибка сервера: преждевременный конец заголовков сценариев:

Параметрированный запрос

Этот код защищен?

/* Create a new mysqli object with database connection parameters */ $mysqli = new mysql('localhost', 'username', 'password', 'db'); if(mysqli_connect_errno()) { echo "Connection Failed: " . mysqli_connect_errno(); exit(); } /* Create a prepared statement */ if($stmt = $mysqli -> prepare("SELECT priv FROM testUsers WHERE username=? AND password=?")) { /* Bind parameters s - string, b - boolean, i - int, etc */ $stmt -> bind_param("ss", $user, $pass); /* Execute it */ $stmt -> execute(); /* Bind results */ $stmt -> bind_results($result); /* Fetch the value */ $stmt -> fetch(); echo $user . "'s level of priviledges is " . $result; /* Close statement */ $stmt -> close(); } /* Close connection */ $mysqli -> close(); 

Что касается защиты от инъекции mySQL, то да. Параметризированные запросы Mysqli безопасны против инъекционных атак.

Если $user исходит из внешнего источника, вы можете добавить htmlentities() оператор echo, чтобы запретить пользователям htmlentities() с таким именем пользователя, как <script>(some malicious code)</script>

Сам вызов безопасен. Вы могли бы поместить этот $mysqli = new mysql('localhost', 'username', 'password', 'db'); в отдельном файле, однако, вне вашего общедоступного веб-каталога.

Добавление к комментарию Пекки: также используйте htmlspecialchars на $ result в выражении echo.