我已经为.NET和所属的SQL-Server制作了一些登录脚本。
目前我想知道如何继续,当用户成功登录时。
我的意思是: 用户登录,成功,然后您可以在程序中设置ID: loggedinuser = 1'表示用户数据库中的id。
但是如果有人通过一些恶意程序改变了这个价值呢?
这会被称为会话劫持正确吗?
如何进行呢?
希望你能理解我试图解释的内容。
谢谢!
答案 0 :(得分:0)
您是将该值存储在Cookie还是其他前端?
通常,您永远不会出于任何原因将数据库主键暴露给用户(这不仅对于用户ID而且对于存储在数据库中的任何类型的顺序ID都是一个很好的经验法则)。有些框架已经在幕后处理了所有这些安全注意事项,但是你已经建立了自己开发的东西,这里有两种方法可以阻止会话劫持......
1)您可以在将用户ID发送到前端之前对其进行加密。这样,用户只能看到一串无意义的字符,并且无法更改任何内容。
2)另一种(更好的)方法是使用会话令牌。这可能是一个GUID,或另一个完全随机的数字,这将是唯一发送给用户的东西。在您的后端,此令牌将映射到"会话"其中包含用户ID。数据只能在服务器上获得,用户永远不会知道会话中存储的内容。
还有很多其他方法可以解决这个问题,但上述两种方法最常见,最直接。
但是,最好的方法是使用已建立的框架(例如ASP.NET成员资格),它已经为您解决了所有这些问题。自己动手将总是会引入错误,并且很容易错过利基案例。