我正在努力理解为了在网站上安全地输入和输出数据,我必须遵循的步骤。这就是我目前所理解的:
**
程序
**
1) 用户输入数据
2) 此数据使用JavaScript进行验证。如果数据与结构不匹配请求,发送错误消息。
3) 如果浏览器禁用或不支持JavaScript,还将使用PHP验证数据。PHP验证将与JavaScript验证几乎相同。如果数据与请求的结构不匹配,则发送一条错误消息。
4) 打开与数据库的连接(PDO方法)
5) 使用准备好的语句(PDO方法)根据您的数据库检查输入数据,并在需要时返回错误消息[例如,如果数据是一个电子邮件地址,则我们不能有两个用户使用相同的电子邮件地址/错误消息:此电子邮件地址已注册。如果您已注册,请登录或使用其他电子邮件地址注册]。
6) 完成所有检查后[客户端(JavaScript)和服务器端(PHP)],使用准备好的语句将未转义的数据插入数据库。
7) 当数据被请求并且必须显示在web浏览器上时,只有转义(输出)数据,以防止XSS。
**
安全性
**
A) 当权限级别发生变化时(从登录到注销,反之亦然),PHP脚本将使用session_regenerate_id–减轻会话固定
B) SSL将用于最大限度地减少客户端和服务器之间的数据暴露
C) 表单将有一个隐藏字段嵌套一个反CSRF令牌,将根据会话中存储的令牌进行检查–减轻CSRF
D) 密码将在使用Bcrypt哈希算法(使用适当的盐)进行哈希后存储
E) (2)+(3)验证将使用正则表达式。我知道,一个错误的正则表达式会导致许多错误。是否有任何公认的正则表达式用于验证电子邮件地址、密码等?
**
问题:
**
1) 我是否正确理解输入/输出程序?我做错什么了吗?
2) 我知道,在安全方面,你永远不可能得到100%的保护。我还能做什么?我在上面写的东西有错吗?
提前谢谢。
- 是的,总的来说你完全理解
- 正如你自己所指出的,这是一个无限开放的话题。有成千上万的矢量。其中一些是
include injection
(从不包含或读取从用户输入中盲目获取的文件)、eval
(避免将此运算符作为烫手石),upload injection
是一个涉及多个问题的广泛主题(简而言之,始终验证输入数据格式)
截至regexp-哦,是的。试试谷歌。