我们正在开发一个Windows应用程序,就像大多数应用程序一样,有一个登录表单。我不喜欢的是登录表单验证用户并在用户和传递正确时打开主表单。很简单。
调用所有函数调用等而不验证用户并再次传递,应该做什么。
开发安全应用程序的最佳方法是什么?如果由于任何原因,登录表单被传递,其他函数调用将不会运行?
有些开发者建议我们在每个函数中包含一个用户并传递params,这似乎是错误的......
谢谢!
答案 0 :(得分:3)
(误读了你的帖子,最初认为你在谈论网络表单,所以抓住原来的答案)
如果所有内容都在您的应用中运行,您可以控制是否通过登录表单,除非您启动单独的.exe。除非需要采取额外的高安全措施,否则您应该安全地知道用户已登录。
如果不了解有关您的应用程序的更多信息,很难说出最佳的方法。在最基本的级别,您可以在用户登录时设置全局变量,并在每个函数中执行任何其他操作之前检查它。
答案 1 :(得分:1)
如果这是在用户PC上运行的应用程序,那么实际上无法保护它。它可以根据用户的意愿进行拆卸和拆卸并重新组装。
有一些方法可以混淆代码,但实际上并没有任何方法可以保护代码。
但是,有一些方法可以对数据库或Web服务等外部资源进行身份验证和保护。
答案 2 :(得分:0)
我同意肖恩的观点。但是如果你想手动完成(假设你使用的是asp.net), 然后我用过这个: 1)当用户通过身份验证时,我会发出一个身份验证票证,其中加密并存储用户名,时间戳和他的权限。我将此票证存储在cookie中。 2)在每个页面中,我在page_preload事件处理程序中包含一个身份验证函数。此函数从cookie中读取票证,对其进行解密并检查用户名,时间戳和权限。这样我可以确保 1)用户已通过thro'登录页面, 2)他还没有超时 3)他正在使用具有所需权限的页面。 如果任何信息似乎无效,则会将其重定向到登录页面。
因此,您只需要访问数据库一次以进行身份验证,即。在登录页面上。对于后续请求,您只需要解密身份验证票证并检查它是否包含有效数据。
这可能会带来一点开销,但如果安全性很重要,那么这个开销可能是可以控制的。
希望这有帮助, vamyip
答案 3 :(得分:0)
应在第二层和第三层重新验证您的所有权限。您的应用只是第一层。
如果您将所有3个层级合并到应用程序本身,那么您 DO 需要一种方法来跟踪权限。
答案 4 :(得分:0)
如果您使用的是ASP.NET,为什么要将票证存储在Cookie中?只需将其放入会话变量中,让ASP处理cookie。这样,cookie中就没有重要信息存储在服务器的内存中。
第一层是客户看到的,应该只显示并让用户尝试更改他们有权访问的内容。
有人可能会在第一层找到一个循环漏洞,因此第二层应始终在将请求转发给第三层之前验证所有请求。第三层只是您的数据,应该有逻辑限制,以确保数据保持清洁,但不太关注安全性。
确保第2层和第3层“安全”的唯一方法是将它们放在不同的服务器上。任何时候您不信任客户端或安全性是优先级,第二层和第三层不应该在客户端应用程序中。
通常,第一层是可攻击的,这就是为什么你也在第二层验证。如果第二层和第三层在客户端,那么它们也是可以破解的。