2010-08-13 71 views
1

我不是专业的网络开发人员,但我热爱网络开发作为业余爱好。 我是一名学生,我被要求创建一个部门活动网站。我需要为用户注册创建HTML表单。我知道XSS脚本攻击和SQL注入。但不知道他们是如何工作的。我在服务器端使用PHP和MySQL。使用JavaScript,PHP,MySQL进行html表格处理时的安全防范措施

我正在考虑:

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

这一切,我使用正则表达式检查做的 - 无论是使用JavaScript和PHP

现在我的问题是:

  • 什么是我应该允许进入的所有字符我的数据库?
  • 如果我将<和>&lt;&gt;替代方案转换成可以吗?
  • 接受输入时还应该考虑什么?

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

我已经在谷歌搜索,但无法找到正确的答案。 :(

回答

1

防止SQL注入,你应该使用该语言的逃逸功能。对于PHP,这是mysql_real_escape_string。或者,更好的是,使用PDO来限制哪些用户可以放入DB。

的HTML注入/ XSS攻击是不同的,你可以存储原始的HTML中没有问题的数据库,但显示任何HTML 之前与用户发起,呼吁它htmlspecialcharacters,以防止它从客户端的Web浏览器进行解释

。不是代码您自己的自定义检查。你会错过的东西。

+0

并会有收获在性能上如果在将数据输入到数据库之前使用htmlspecialcharacters一次,而不是在输出时使用它:) – 2010-08-13 16:56:23

+0

@idlecool但它的设计不好。在实际使用视图之前,您不应该对数据进行调整。 – Iznogood 2010-08-13 17:04:34

+0

@Idlecool:是的,但你不知道数据将被使用的上下文。如果您想解析发送的HTML用户并在不显示的情况下将其用于某个地方,该怎么办?那么你不得不非特殊化它。 – Borealid 2010-08-13 17:04:37

0

至于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一切你进入DB

相关问题