在处理 Web 上的安全主题时,没有“真正的”安全方式来做事。网络安全本质上是一场猫捉老鼠的游戏。日常用户是老鼠,黑客是猫。Web 安全主要是被动的,这意味着只有在发生安全漏洞时才会考虑新的安全实施。因此,黑客通常比安全实施领先一步。
话虽这么说,您可以做很多事情来使您的网站更安全:
1) 使用盐值。
我知道你已经在这样做了,这是一个很好的做法。说使用盐可以使您的应用程序安全是错误的,因为事实并非如此。是的,它使破解变得更加困难,但是如果您将盐值存储在数据库中并且最终将整个数据库注入/转储,那么黑客就拥有使用彩虹表所需的所有信息。使用特定于应用程序的盐是一种额外的安全措施,但同样,如果您的应用程序被黑客入侵并且源代码被获取/反编译,那么黑客就拥有了他们需要的一切。
2) 使用 SSL 证书
确保在进出应用程序所在服务器时对数据进行加密是防止数据包嗅探和会话侧劫持的好方法。
3) 使用 SHA2 哈希
SHA2 哈希值被广泛实施,并且比其前身 SHA1 安全许多倍。
4)让您的数据库和您的应用程序驻留在不同的服务器上。
如果您将数据库放在单独的服务器上(或至少在具有单独 IP 的地方),那么您可以将对数据库的访问限制为给定的调用 IP 地址/端口。在这样做时,您可以确保可以对您的数据库进行的唯一调用来自您的应用程序。
5) 使用存储过程而不是动态创建查询。
如果您的应用程序中包含逐行构造 SQL 查询的代码,那么攻击者可以使用此信息来绘制数据库的结构并随后有效地注入它。如果您使用存储过程,那么将从源代码的角度抽象出此逻辑,攻击者无法通过查看它们来了解您的数据库结构。
6) 检查所有可能的注入点
尝试破解您自己的应用程序。你最了解它,所以你应该知道它的弱点。虽然开发人员可能会制造一些最糟糕的 QAer,但应该可以弄清楚你是否留下了一个可注射的洞。您是否在任何地方使用用户输入来格式化查询?如果是这样,请弄乱输入,看看你能做什么。
根据我的经验,如果您做到以上所有,那么您将受到很好的保护。没有什么是 100% 安全的,但除非您持有数十亿美元的免费现金赠品的密码,否则这些障碍将阻止绝大多数黑客(如果不是全部)。在少数大公司的网站上工作过,其中一些网站使用的缺乏安全性是荒谬的(咳嗽*咳嗽*索尼咳嗽*咳嗽*)。
还要记住,很多用户喜欢在不同的平台上使用相同的密码。如果用户 A 对所有内容都使用相同的密码并注册您的站点(一个安全的),然后注册另一个站点(一个不安全且不散列密码的站点),那么攻击者只需找到最薄弱的链接用户的浏览习惯并从那里获取纯文本密码。
此致,