这个问题可能与主观问题有关,但这不是真正的问题.
当您开发网站时,您必须知道几点:XSS攻击,SQL注入等.确保所有潜在的攻击都非常困难(并且需要很长时间才能编码).
我总是试图确保我的申请,但我不知道何时停止.
让我们举个相同的例子:像Facebook这样的社交网络.(因为银行网站必须保护其所有数据.)
我看到一些方法:
不保护XSS,SQL注入......当您信任您的用户时,这可以真正完成:私有企业的后端.但是你确保这种类型的应用程序安全吗?
仅当用户尝试访问非拥有数据时才进行安全攻击:这对我来说是最好的方法.
保护所有,所有,全部:保护所有数据(所有者与否):用户无法破坏自己的数据和其他用户数据:这是非常漫长的事情并且非常有用吗?
安全的常见攻击,但不能保护非常严重的攻击(因为与被黑客攻击的机会相比,代码太长了).
好吧,我真的不知道该怎么做......对我来说,我尝试做1,2,4,但我不知道这是不是很好的选择.
不保证所有数据安全是否存在可接受的风险?我可以保护所有数据但是我需要两倍的时间来编写代码吗?风险和"时间就是金钱"之间的企业方法是什么?
谢谢你分享这个,因为我认为很多开发人员都不知道什么是好的限制.
编辑:我看到很多回复谈论XSS和SQL注入,但这不是唯一需要注意的事情.
我们来一个论坛.一个帖子可以写在我们是主持人的论坛中.因此,当您将数据发送到客户端视图时,您可以添加或删除此论坛的"添加"按钮.但是当用户尝试在服务器端保存线程时,您必须检查该用户是否有权点对它(您不能信任客户端视图安全性).
这是一个非常简单的例子,但在我的一些应用程序中,我有一个权限层次结构,这可能非常难以检查(需要大量SQL查询...)但另一方面,它真的很难找到hack(数据在客户端视图中是伪加密的,有很多数据要修改以使黑客运行,黑客需要很好地理解我的应用程序规则才能进行黑客攻击):在这种情况下,我可以检查一下只有表面安全漏洞(非常容易入侵)或者我可以检查非常困难的安全漏洞(但它会降低我对所有用户的性能,并且需要很长时间才能开发).
第二个问题是:我们是否可以"信任"(不开发硬性和长期代码,这会降低性能)在客户端视图上进行非常严格的攻击?
这是另一篇关于这种黑客的帖子:(休眠和集合检查)安全问题:如何保护从客户端到服务器的Hibernate集合?
我认为你应该尽力保护你所能做到的一切,花在这上面的时间与修复由于某人利用你留在某个地方的漏洞所造成的混乱所需的时间相比毫无意义.
无论如何,大多数事情很容易修复:
sql注入实际上与sql无关,它只是字符串操作,所以如果你觉得不舒服,只需使用带有绑定参数的预处理语句而忘记问题
在将每个不受信任的数据作为输出发送出去之前,通过转义(使用htmlentities左右)很容易否定跨站点利用 - 当然这应该与广泛的数据过滤相结合,但这是一个好的开始
凭证窃取:永远不会存储可以提供对受保护区域的永久访问的数据 - 而是在cookie中保存用户名的哈希版本并为会话设置时间限制:这样一来,可能碰巧窃取此数据的攻击者将拥有限制访问而不是永久访问
从来没有想过只是因为用户登录然后他就可以信任 - 将安全规则应用于每个人
将从外部获得的所有内容视为具有潜在危险:即使是从中获取数据的受信任站点也可能会受到损害,您也不希望自己也陷入瘫痪 - 即使您自己的数据库可能会受到损害(特别是如果您正在共享环境)所以不要相信它的数据
当然还有更多,比如会话劫持攻击,但这些是你应该首先看到的东西.
编辑您的编辑:
我不确定我是否完全理解你的例子,特别是你对"信任客户端安全"的意思.当然,所有访问受限的页面都必须先检查用户是否有权查看内容,也可以选择是否(或她)拥有正确的权限级别:所有用户都可以使用某些操作,有些其他只适用于更受限制的群体(如论坛中的版主).所有这些控件都必须在服务器端完成,因为您永远不会相信客户端发送给您的是什么,通过GET,POST甚至COOKIES来获取数据.这些都不是可选的.