我正在开发一个带有前端和后端的 Web 应用程序。公众可以在前端存储信息,某些人可以管理插入的详细信息并进行编辑。
由于应用程序的个人信息安全性非常重要。我想知道我为确保信息安全而采取的措施是否充分。
1 - “低”级安全
域有自己的 SSL 证书和 DNSSEC。应用程序在私有 VPS 上运行;所有密码(unix 用户、数据库用户等)都非常强大。
2 - 目录结构
/data
|- lib // store php classes and runtime information
| |- constants.php // stores, among others, the private key
|- cnt // logical content
|- public // the public root where nginx directs to
| |- img // images
| |- res // other resources
| |- index.php // only contains include('../private.php');
|- private.php // the real webapplication root
因此,如果 PHP 出现问题导致代码吐出并损害目录结构;唯一可以通过 NGINX 网络服务器看到的是公共文件夹。
3 - 数据库
存储在 postgreSQL 中的信息使用 openssl_encrypt 加密,并SHA_256_AES
使用存储在 php 文件中的私钥加密(请参阅目录结构/data/lib/constants.php
)因此,如果数据库遭到破坏/被盗,则没有私钥,数据将无法读取。
4 - 管理用户
登录用户获得存储在 cookie 中的 sha1 会话 ID;服务器上存储的会话的登录状态。获取会话(ID)可以通过表单完成;它仅通过 javascript 在 Internet 上发送 sha1 编码的密码哈希。当然密码是加盐的并且有一定的规则(长度> 8,特殊字符等)
5 - XSS、CSRF、$_POST
每个用户输入都被过滤;服务器上的更改只能通过后请求进行。每个表单都有一个随机生成的 CSRF 安全令牌。
我唯一不满意的是私钥在服务器上可用,尽管不在公共 webroot 中。这是以某种方式未完成还是有其他方法可以做到这一点?
我错过了什么吗?