使用过一次之后不使用预备声明是否安全?

时间:2014-02-22 11:12:39

标签: php mysqli prepared-statement

我正在制作一个需要检查用户有效性的登录系统。基本上,它需要三个步骤。

  1. 从用户输入中获取$username

  2. 检查数据库中是否存在$username

    SELECT * FROM members WHERE name = $username LIMIT 1
    
  3. 更新$username的登录信息(例如登录时间,IP,...)

    UPDATE members SET ip = $ip WHERE name = $username
    
  4. 在第二步中,假设我已经使用prepared-statement查询(MySQL)数据库,以避免SQL注入。我想在第三步仍然需要使用prepared-statement。

    我的逻辑是$username已经通过了第二步,所以它应该是一个有效的参数。为了节省由于使用prepared-statement而导致的额外服务器往返,似乎没有必要在第三步中使用prepared-statement更新数据库。

    我是使用数据库的新手。希望有人能澄清我的问题。 :)

3 个答案:

答案 0 :(得分:3)

不!总是用准备好的陈述。您可以传递10个验证,但在第11次删除您的数据库

答案 1 :(得分:0)

如果用户名中包含特殊字符,则会影响您的第二个查询。这被称为second order SQL injection

答案 2 :(得分:0)

如果$ username在第一行是邪恶的,它将在第二行。

除非您使用从数据库中读取的值覆盖它。