Tuesday, March 24, 2009

php app 避免sql注入(SQL Injection)攻击

  • 利用php内置 addslashes() 方法对用户输入的字符串进行处理 / 输入结果时用stripslashes() 取得原值。
  • 始终使用 mysqli::query 方法确保只会执行单条查询
    确定多条查询语句时,才采用 mysqli::multi_query
  • 利用 db->prepare() 通过sql模板进行查询
    • eg:
      $sql_templet = "update todo set info = ? where id = ?";
      $stmt = $this->db->prepare($sql_templet);
      $stmt->bind_param("si",$info,$id);
      $result = $stmt->execute();
  • 阅读"php and mysql web developmen"一书 Chapter 16章节时提到的
    mysqli::real_escape_string 方法也能起到addslashes()的作用,
    • 区别:
      • addslashes : quote ('), double quote ("), backslash () and NUL
      • mysqli::real_escape_string NUL (ASCII 0), \n, \r, \, ', ", and Control-Z.
        除此之外,real_escape_string 还能起到转编码的作用。

No comments: