Я новичок в PHP, и я понял, что мое подключение к базе данных с использованием php-формы (с пользовательскими и текстовыми вводами) было абсолютно небезопасным:
Это работало, но было небезопасно:
<?php $link=mysqli_connect('localhost','xx','xx','xx'); $sql=' SELECT * FROM usuarios WHERE username="'.$_POST['usuario'].'" AND pass="'.$_POST['usuario'].'" '; $rs=mysqli_query($link,$sql); mysqli_close($link); ?>
Итак, я прочитал о mysqli_real_escape_string и решил попробовать:
<?php $link=mysqli_connect('localhost','xx','xx','xx'); $usuario=mysqli_real_escape_string($link, $_POST["usuario"]); $clave=mysqli_real_escape_string($link, $_POST["clave"]); $sql=' SELECT * FROM usuarios WHERE username="'.$usuario.'" AND pass="'.$clave.'" '; $rs=mysqli_query($link,$sql); mysqli_close($link); ?>
Это верно? Это хороший пример того, как использовать mysqli_real_escape_string?
Это верно?
Да.
Это хороший пример того, как использовать mysqli_real_escape_string?
Если это когда-либо используется, эта функция должна быть инкапсулирована в некоторую внутреннюю обработку и никогда не должна быть вызвана прямо из кода приложения. Вместо этого вместо этого следует использовать заполнитель для представления данных в вашем запросе:
$sql='SELECT * FROM usuarios WHERE username=? AND pass=?';
И затем, при обработке меток-заполнителей, эта функция может применяться (если применимо), но не сама по себе, а по всем правилам форматирования.
Использование функций mysqli () должно быть зарезервировано только разработчикам фреймворка и другим, кто знает обо всех проблемах безопасности, которые он может принести. Для всех остальных есть PDO . Он так же прост в использовании, как и mysqli (), и гораздо безопаснее.
Да, вы будете использовать его сейчас.
Самое приятное в использовании mysqli в том, что оно ориентировано на объекты. Поэтому вы можете использовать его следующим образом:
<?php $mysqli = new mysqli("host", "user", "password", "database"); $usuario = $mysqli->real_escape_string($_POST["usuario"]); $clave = $mysqli->real_escape_string($_POST["clave"]); $sql=' SELECT * FROM usuarios WHERE username="'.$usuario.'" AND pass="'.$clave.'" '; $mysqli->query($sql); $mysqli->close(); ?>
Или вы можете использовать PDO.