Ros*_*nda 14 php mysqli sql-injection
我是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);
?>
Run Code Online (Sandbox Code Playgroud)
所以,我读过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);
?>
Run Code Online (Sandbox Code Playgroud)
它是否正确?这是如何使用mysqli_real_escape_string的一个很好的例子吗?
You*_*nse 19
它是否正确?
是.
这是如何使用mysqli_real_escape_string的一个很好的例子吗?
如果曾经使用过,这个函数必须封装到一些内部处理中,而不必从应用程序代码中直接调用.一个占位符必须代替,在查询中表示数据:
$sql='SELECT * FROM usuarios WHERE username=? AND pass=?';
Run Code Online (Sandbox Code Playgroud)
然后,在处理占位符标记,此功能可以被应用(如适用),但不是本身,而是沿着所有的格式规则.
小智 7
是的,你将立即使用它.
使用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();
?>
Run Code Online (Sandbox Code Playgroud)
或者您可以使用PDO.
mysqli()函数的使用只应保留给框架开发人员和其他了解其可能带来的所有安全问题的人员.对于其他人来说,还有PDO.它和mysqli()一样容易使用,而且更安全.