使用javascript,PHP,MySQL进行html表单处理时的安全预防措施

时间:2010-08-13 16:37:27

标签: php javascript regex forms

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

我正在考虑:

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

所有这些我正在使用RegEx检查 - 使用javascript和PHP

现在我的问题是:

  • 允许进入我的数据库的所有字符是什么?
  • 如果我转换<是否可以。和>使用<>替代方案?
  • 在接受输入时我还应该考虑什么?

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

我在谷歌搜索过但无法找到合适的答案。 :(

2 个答案:

答案 0 :(得分:1)

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

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

编码您自己的自定义支票。你会错过一些东西。

答案 1 :(得分:0)

至于用户名,这应该做的工作:

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或mysql_real_escape_string