我在程序mysqli中创建了以下脚本,因为我只是从旧的mysql开始。我不确定查询周围的引号类型以防止注入。有些用户发布了'
其他人使用"
的示例,所以现在我很困惑。我可以使用以下代码注入或攻击吗?什么是正确的引号?
$username = mysqli_real_escape_string($database,$_POST['form_user']);
$password = mysqli_real_escape_string($database,$_POST['form_password']);
$members = "SELECT * FROM `accounts` WHERE `member` = '$username'";
$result = mysqli_query($database,$members);
我只是一个初学者,所以面向对象或PDO或准备好的语句对我来说现在很难,所以我只需要改进这个脚本并使它更安全但是有很多关于查询变量的例子和符号我很困惑什么是不安全的。
答案 0 :(得分:1)
mysqli_real_escape_string
遵循底层的C mysql库的mysql_real_escape_string
function(或等效的),它对字符进行编码:
\
,'
,"
,NUL
(ASCII 0),\n
,\r
和Control + Z
因此,'
和"
都被转义了。这意味着您可以使用其中一个来查询查询中的字符串,同样可以使用MySQL allows both double and single quoted strings。
我知道你知道这一点,但你真的应该现在开始prepared-statement bandwagon而不是逃避。