【发布时间】:2013-05-23 14:55:02
【问题描述】:
这可能是一个重复的问题,但我真的找不到任何答案。我有一个忘记密码的脚本,它使用 $_GET 从 URL 中获取用户的电子邮件地址。该脚本然后检查 $_GET 是否有错误消息,然后传递给 mysql 以检查用户 ID 是否相同。
现在脚本本身没问题,但用户 id 在 var_dump() 中以字符串而不是整数的形式返回。我本来打算放手的,但后来我读到如果用户 id 不是 $_GET 变量中的整数,它可能会导致攻击,这让我有点担心。我试图将 num_rows 值更改为 int 但没有成功,因为 num_rows 返回一个数组。检查用户ID的代码是:
if (mysql_num_rows($result) == 1) {
// NEED TO TURN THIS ARRAY TO AN INT
list($userId) = mysql_fetch_array($result, MYSQL_NUM);
}
//elseif (mysql_num_rows($result) <= 0) {
else {
$wrong = '<p style="color: red">Something went wrong. Please try again</p>';
}
就像我之前说的剧本本身很好,只是我读了一些东西,现在无法摆脱它,这导致我问你们。用户 ID 是否必须是整数,或者我可以将其作为字符串处理吗?
编辑:感谢您的所有 cmets 和建议。 php还有很多东西要学。再次干杯。
【问题讨论】:
-
如果你的脚本需要一个整数,你应该验证输入是一个整数。
$_GET中的值将是字符串,但您可以使用is_numeric检查它们并使用(int)转换它们。 -
你从 URL 中获取的东西应该是一个 int。如果它是一个字符串,那就是一个漏洞。当您从数据库中检索 ID 时,该值可以是字符串,只要您信任数据库的内容即可。
-
你在哪里做查询?你能和我们分享一下这段代码吗?
标签: php mysql get integer mysql-num-rows