使用javascript、PHP、MySQL处理html表单时的安全注意事项
我不是一个专业的网络开发人员,但我喜欢网络开发作为一种爱好。。 我是一名学生,我被要求制作一个系级活动网站。我需要创建用于用户注册的HTML表单。我知道XSS脚本攻击和SQL注入。但我不知道它们到底是怎么工作的。我在服务器端使用PHP和MySQL 我正在考虑:使用javascript、PHP、MySQL处理html表单时的安全注意事项,php,javascript,regex,forms,Php,Javascript,Regex,Forms,我不是一个专业的网络开发人员,但我喜欢网络开发作为一种爱好。。 我是一名学生,我被要求制作一个系级活动网站。我需要创建用于用户注册的HTML表单。我知道XSS脚本攻击和SQL注入。但我不知道它们到底是怎么工作的。我在服务器端使用PHP和MySQL 我正在考虑: 不要接受空值 验证数字字段是否仅由整数值组成 电子邮件身份验证。等等 所有这些我都是使用正则表达式检查来完成的——包括javascript和PHP 现在我的问题是: 哪些字符是我不允许进入数据库的 如果我用他们的和替代方案转换,可以
- 不要接受空值
- 验证数字字段是否仅由整数值组成
- 电子邮件身份验证。等等
- 哪些字符是我不允许进入数据库的
- 如果我用他们的
和
替代方案转换,可以吗
在输入时,我还应该考虑什么?
我在谷歌上搜索过,但没有找到正确的答案(为了防止SQL注入,您应该使用该语言的escape函数。对于PHP,这是
mysql\u real\u escape\u string
。或者更好的是,使用PDO来限制用户可以放入数据库的内容
HTML注入/XSS攻击是不同的;您可以在数据库中存储原始HTML而不会出现问题,但在显示任何源自用户的HTML之前,请在其上调用htmlspecialcharacters
,以防止客户端的web浏览器对其进行解释
不要编写你自己的自定义检查代码。你会错过一些东西。为了防止SQL注入,你应该使用该语言的转义函数。对于PHP,这是
mysql\u real\u escape\u string
。或者,更好的是,使用PDO来限制用户可以放入数据库的内容
HTML注入/XSS攻击是不同的;您可以在数据库中存储原始HTML而不会出现问题,但在显示任何源自用户的HTML之前,请在其上调用htmlspecialcharacters
,以防止客户端的web浏览器对其进行解释
不要为自己的自定义检查编写代码。对于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.";
}
if(preg_匹配('/^[a-z\d_ \-]{5,20}$/i',$username)){
echo“您的用户名正常。”;
//请注意,您仍然需要对
//不过,我个人建议坚持/^[a-z\d{5,20}$/I
}否则{
回显“错误的用户名格式”;
}
对于SQL注入,在输入数据库的所有内容上使用mysql\u real\u escape\u字符串或mysqli\u real\u escape\u字符串
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.";
}
if(preg_匹配('/^[a-z\d_ \-]{5,20}$/i',$username)){
echo“您的用户名正常。”;
//请注意,您仍然需要对
//不过,我个人建议坚持/^[a-z\d{5,20}$/I
}否则{
回显“错误的用户名格式”;
}
至于SQL注入,在数据库中输入的所有内容上都使用mysql_real_escape_string或mysqli_real_escape_string,如果在将数据输入数据库之前使用一次htmlspecialcharacters,而不是在输出时使用它,那么性能会有所提高:)@idlecool但它的设计并不好。在视图中实际使用数据之前,不应对数据进行处理。@Idlecool:是的,但您不知道数据将在什么上下文中使用。如果您想解析用户发送的HTML并在某处使用它而不显示它,该怎么办?那你就得取消特价了。哦!对我明白了。。。所以我必须在输入数据之前使用mysql\u real\u escape\u字符串,而在输入数据之后使用htmlspecialcharacters。当我也在读有关PDO的文章时:如果在将数据输入数据库之前只使用一次htmlspecialcharacters,而不是在输出时使用它,那么性能会有所提高:)@idlecool,但它的设计并不好。在视图中实际使用数据之前,不应对数据进行处理。@Idlecool:是的,但您不知道数据将在什么上下文中使用。如果您想解析用户发送的HTML并在某处使用它而不显示它,该怎么办?那你就得取消特价了。哦!对我明白了。。。所以我必须在输入数据之前使用mysql\u real\u escape\u字符串,而在输入数据之后使用htmlspecialcharacters。当我也在读有关PDO的文章时: