【问题标题】:Safety precautions while doing html form processing using javascript, PHP, MySQL使用javascript、PHP、MySQL进行html表单处理时的安全注意事项
【发布时间】:2010-08-13 16:37:27
【问题描述】:

我不是专业的 Web 开发人员,但我喜欢将 Web 开发作为一种爱好。 我是一名学生,我被要求制作一个部门活动网站。我需要为用户注册创建 HTML 表单。我知道 XSS 脚本攻击和 SQL 注入。但不知道它们究竟是如何工作的。我在服务器端使用 PHP 和 MySQL。

我正在考虑:

  • 不要取空值。
  • 验证数字字段是否仅由整数值组成。
  • 电子邮件 ID 验证。等等。

所有这一切我都在使用 RegEx 检查 - 使用 javascript 和 PHP

现在我的问题是:

  • 哪些字符是我应该不允许进入我的数据库的?
  • 如果我将 转换为他们的 <> 替代品可以吗?
  • 在接受输入时我还应该考虑什么?

我不想限制用户输入无害的符号。那么在将值存储到数据库之前是否需要过滤任何特定的字符集,以便我可以正确地为表单字段编写正则表达式检查?

我在谷歌上搜索过,但找不到正确的答案。 :(

【问题讨论】:

    标签: php javascript regex forms


    【解决方案1】:

    为防止 SQL 注入,您应该使用语言的转义函数。对于 PHP,那是 mysql_real_escape_string。或者,更好的是,使用 PDO 来限制用户可以放入数据库的内容。

    HTML 注入/XSS 攻击不同;您可以毫无问题地将原始 HTML 存储在数据库中,但在显示任何源自用户的 HTML 之前,请在其上调用 htmlspecialcharacters 以防止它被客户端的 Web 浏览器解释。

    不要不要编写您自己的自定义检查。你会错过一些东西。

    【讨论】:

    • 如果在将数据输入数据库之前使用一次 htmlspecialcharacters,而不是在输出时使用它,那么性能会有所提高:)
    • @idlecool 但它的设计并不好。在视图中实际使用数据之前,您不应该对数据进行调整。
    • @Idlecool:是的,但您不知道数据将被使用的上下文。如果您想解析用户发送的 HTML 并在某处使用它而不显示它怎么办?然后你必须取消特殊字符。
    • 哦!是的!我明白了......所以我必须在输入数据之前使用 mysql_real_escape_string,而在它之后使用 htmlspecialcharacters。当我也在阅读有关 PDO 的信息时。 :)
    【解决方案2】:

    至于用户名,这应该可以完成工作:

    if (preg_match('/^[a-z\d_\-<>]{5,20}$/i', $username)) {
        echo "Your username is ok."; 
        // Note that you still have to do something with <>
        // Though, personally I'd advise sticking to /^[a-z\d_]{5,20}$/i
    } else {
        echo "Wrong username format.";
    }
    

    Source

    至于 SQL 注入,在您输入数据库的所有内容上使用 mysql_real_escape_string 或 mysqli_real_escape_string

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 2011-11-02
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多