我是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_真实的_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_真实的_escape_string的好例子吗?
3条答案
按热度按时间lf3rwulv1#
是这样吗?
是的。这个单独的例子是安全的。这并不意味着,但是,mysqli_真实的_escape_string应该被视为一个函数,其目的是防止SQL注入。因为在这个例子中,它保护你只是出于意外。下面提供的一个愚蠢的例子可以证明:
在这里,几乎任何SQL都可以添加到$_POST[“id”]并破坏数据库中的havok。
这是一个如何使用mysqli_真实的_escape_string的好例子吗?
一点也不
应该放弃此函数,而在查询中使用参数。此函数将使您无法使用字符串文字以外的任何查询部分。甚至可以简单地忽略。
占位符,也称为参数,必须用来表示查询中的数据:
请参阅我关于correct use of mysqli的文章中的其他示例
PDO::quote()
一样。只有这样才安全。xcitsw882#
mysqli()函数的使用应该只留给框架开发人员和其他意识到它可能带来的所有安全问题的人。对于其他人,有PDO。它和mysqli()一样容易使用,而且更安全。
htrmnn0y3#
是的,您现在就可以使用它保存。
使用mysqli的好处是它是面向对象的。你可以这样使用它:
你可以使用PDO。