Этот код защищен?
/* 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.