这段代码可以安全地用于我的网站吗?没有sql注入或黑客攻击,是或否?我不想被黑客攻击等。
<?php
$db = new mysqli ("localhost", "-", "-", "-");
if($_GET['look'] && $_GET['username'])
{
$username = $db->real_escape_string($_GET['username']);
$look = $db->query("SELECT look FROM users WHERE username = '".$username."'")->fetch_assoc();
echo $look['look'];
}
if($_GET['missie'] && $_GET['username'])
{
$username = $db->real_escape_string($_GET['username']);
$motto = $db->query("SELECT motto FROM users WHERE username = '".$username."'")->fetch_assoc();
echo $motto['motto'];
}
if($_GET['while'] && $_GET['status'])
{
$status = $db->real_escape_string($_GET['status']);
$motto = $db->query("SELECT * FROM users WHERE motto = '".$status."'");
while($lol = $motto->fetch_assoc()) {
echo $lol['username'] . '/';
}
}
?>
我怎样才能改善它?
答案 0 :(得分:2)
如果你看一下mysql_real_escape_string的函数描述,它会说明
mysql_real_escape_string - 转义字符串中的特殊字符以用于SQL语句
所以它会逃脱你的参数,但我不建议完全依赖它。
在将来的版本中,php将不再支持mysql或mysqli,您将需要使用PDO。我为自己的项目多次使用的一个很好的资源是http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers。
PDO允许您创建预准备语句并为您转义参数并保护自己免受SQL注入。以下是使用PDO如何做到这一点的示例:
<span title="The great and mighty [% name | html %]">...</span>