代码之家  ›  专栏  ›  技术社区  ›  Shiv Deepak

使用javascript、php、mysql进行HTML表单处理时的安全注意事项

  •  1
  • Shiv Deepak  · 技术社区  · 15 年前

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

    我正在考虑:

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

    我正在使用regex check执行的所有这些操作-包括javascript和php

    现在我的问题是:

    • 我应该写些什么 允许进入我的数据库?
    • 如果我将<和>转换为 &lt; &gt; 选择?
    • 在接受输入时,我还应该考虑什么?

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

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

    2 回复  |  直到 15 年前
        1
  •  1
  •   Borealid    15 年前

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

    HTML注入/XSS攻击是不同的;您可以将原始HTML存储在数据库中而无需发出任何问题,但在 显示 任何源于用户的HTML,调用 htmlspecialcharacters 以防止客户端的Web浏览器对其进行解释。

    编写您自己的自定义检查代码。你会错过什么。

        2
  •  0
  •   Robus    15 年前

    至于usename,应该这样做:

    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