100分请教一个问题

代码小天王 2012-06-13 06:22:10
当我登录成功之后,保存客户端账号和密码在cookie里面,密码经过了md5加密,这样也可以让用户设置自动登录。

那么我在一些需要获取用户信息的页面,是根据客户端提交的cookie中的账号来去数据库获取,那么如果客户端伪造一个cookie呢,它伪造的一个cookie的值是其他用户的账号,那么我是不是需要每次都去进行一次数据匹配,去匹配我的账号和密码是否对应
...全文
383 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码小天王 2012-06-15
  • 打赏
  • 举报
回复
我看了下,你的做法是可取的,你是把用户名加密之后放在cookie里,如果别人不知道你的加密方式,就算伪造了cookie,也不能进行登录,因为你在服务端解密cookie值然后进行登录,这种做法我认同,我看了下其他大网站也是这样做的,不过客户端不能保存明文用户名,必须加密,不然的话安全性太差
[Quote=引用 28 楼 的回复:]

引用 24 楼 的回复:

呵呵 你还是告诉我 你怎么去做自动登录吧 我知道你的意思。。。。那我想问你 如果你做自动登录 会怎么做呢? 我知道cookie如果不设置有效时间,浏览器关闭会清除 但是这又有什么用 难道浏览器有cookie就可以登录? 在不进行账户密码匹配的情况下 我伪造一个cookie不是可以登录别人的号码?
引用 23 楼 的回复:

引用 1……
[/Quote]
代码小天王 2012-06-15
  • 打赏
  • 举报
回复
我想问,你的做法是不是把用户名明文的方式保存到cookie当中,然后页面载入的时候,如果cookie中有一个值为microsoft,就自动登录?
[Quote=引用 28 楼 的回复:]

引用 24 楼 的回复:

呵呵 你还是告诉我 你怎么去做自动登录吧 我知道你的意思。。。。那我想问你 如果你做自动登录 会怎么做呢? 我知道cookie如果不设置有效时间,浏览器关闭会清除 但是这又有什么用 难道浏览器有cookie就可以登录? 在不进行账户密码匹配的情况下 我伪造一个cookie不是可以登录别人的号码?
引用 23 楼 的回复:

引用 1……
[/Quote]
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 的回复:]

呵呵 你还是告诉我 你怎么去做自动登录吧 我知道你的意思。。。。那我想问你 如果你做自动登录 会怎么做呢? 我知道cookie如果不设置有效时间,浏览器关闭会清除 但是这又有什么用 难道浏览器有cookie就可以登录? 在不进行账户密码匹配的情况下 我伪造一个cookie不是可以登录别人的号码?
引用 23 楼 的回复:

引用 18 楼 的回复:

不把密……
[/Quote]

既然你这么肯定会很容易的伪造Cookie.那就麻烦您伪造一个用户名叫 microsoft 的帐号来登录下这下
http://211.155.230.176:82

先告诉你一下可以登录的用户名和密码都是 google
我的代码里面肯定没有保存密码
落曦 2012-06-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
我纯粹只是想说:

- -不要相信这些可爱的孩子的建议
“自己写一套加密方法”是这个世界上最天真可笑的建议 没有之一
除非你自己是顶尖的数学家 否则你设计的任何算法都不会有现在市面上正在使用的加密算法安全性更好

另外 其实你根本就不需要保存用户的密码 甚至账号信息都不要 而是保存一个token就可以了
最简单无聊的做法之一就比如:用户登录的时候 直接生成一个guid(无脑吧?) 把……
[/Quote]
mad007 2012-06-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

我纯粹只是想说:

- -不要相信这些可爱的孩子的建议
“自己写一套加密方法”是这个世界上最天真可笑的建议 没有之一
除非你自己是顶尖的数学家 否则你设计的任何算法都不会有现在市面上正在使用的加密算法安全性更好

另外 其实你根本就不需要保存用户的密码 甚至账号信息都不要 而是保存一个token就可以了
最简单无聊的做法之一就比如:用户登录的时候 直接生成一个guid(无脑吧?) ……
[/Quote]
guid可行
代码小天王 2012-06-14
  • 打赏
  • 举报
回复
不把密码放在客户端 我怎么去做自动登录。。。。
[Quote=引用 17 楼 的回复:]

因为使用cookie来判断用户是否登录,是判断用户的cookie是否有效,当cookie过期时浏览器会删除掉cookie,cookie也不会被浏览器发送到服务器。这时服务器就知道用户未登录或cookie已经过期(视为未登录)

你说的防止cookie被修改的确是一种攻击方式,而防止cookie被修改的方式之一就是加密cookie。
你可以将用户名以加密的形式保存到cookie中。当然加密方……
[/Quote]
代码小天王 2012-06-14
  • 打赏
  • 举报
回复
如果是加密账户的话 倒好说 但是我看博客园的账户是没加密的
[Quote=引用 17 楼 的回复:]

因为使用cookie来判断用户是否登录,是判断用户的cookie是否有效,当cookie过期时浏览器会删除掉cookie,cookie也不会被浏览器发送到服务器。这时服务器就知道用户未登录或cookie已经过期(视为未登录)

你说的防止cookie被修改的确是一种攻击方式,而防止cookie被修改的方式之一就是加密cookie。
你可以将用户名以加密的形式保存到cookie中。当然加密方……
[/Quote]
  • 打赏
  • 举报
回复
因为使用cookie来判断用户是否登录,是判断用户的cookie是否有效,当cookie过期时浏览器会删除掉cookie,cookie也不会被浏览器发送到服务器。这时服务器就知道用户未登录或cookie已经过期(视为未登录)

你说的防止cookie被修改的确是一种攻击方式,而防止cookie被修改的方式之一就是加密cookie。
你可以将用户名以加密的形式保存到cookie中。当然加密方式不能是简单的md5.

使用asp.net的窗体认证可以让这种攻击成功的可能性降低到几乎是0
代码小天王 2012-06-14
  • 打赏
  • 举报
回复
呵呵 你还是告诉我 你怎么去做自动登录吧 我知道你的意思。。。。那我想问你 如果你做自动登录 会怎么做呢? 我知道cookie如果不设置有效时间,浏览器关闭会清除 但是这又有什么用 难道浏览器有cookie就可以登录? 在不进行账户密码匹配的情况下 我伪造一个cookie不是可以登录别人的号码?
[Quote=引用 23 楼 的回复:]

引用 18 楼 的回复:

不把密码放在客户端 我怎么去做自动登录。。。。
引用 17 楼 的回复:

因为使用cookie来判断用户是否登录,是判断用户的cookie是否有效,当cookie过期时浏览器会删除掉cookie,cookie也不会被浏览器发送到服务器。这时服务器就知道用户未登录或cookie已经过期(视为未登录)

你说的防止cookie被修改的确是一种攻击方……
[/Quote]
  • 打赏
  • 举报
回复
无论如何在密码放到cookie中都是错误的,不管你使用哪种加密方式。
lyc120 2012-06-14
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
引用 11 楼 的回复:
我纯粹只是想说:

- -不要相信这些可爱的孩子的建议
“自己写一套加密方法”是这个世界上最天真可笑的建议 没有之一
除非你自己是顶尖的数学家 否则你设计的任何算法都不会有现在市面上正在使用的加密算法安全性更好

另外 其实你根本就不需要保存用户的密码 甚至账号信息都不要 而是保存一个token就可以了
最简单无聊的做法之一就比如:用户登录的时候 直接生成……
[/Quote]
背离终点 2012-06-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
我纯粹只是想说:

- -不要相信这些可爱的孩子的建议
“自己写一套加密方法”是这个世界上最天真可笑的建议 没有之一
除非你自己是顶尖的数学家 否则你设计的任何算法都不会有现在市面上正在使用的加密算法安全性更好

另外 其实你根本就不需要保存用户的密码 甚至账号信息都不要 而是保存一个token就可以了
最简单无聊的做法之一就比如:用户登录的时候 直接生成一个guid(无脑吧?) 把……
[/Quote]

顶下
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

不把密码放在客户端 我怎么去做自动登录。。。。
引用 17 楼 的回复:

因为使用cookie来判断用户是否登录,是判断用户的cookie是否有效,当cookie过期时浏览器会删除掉cookie,cookie也不会被浏览器发送到服务器。这时服务器就知道用户未登录或cookie已经过期(视为未登录)

你说的防止cookie被修改的确是一种攻击方式,而防止cookie被修改的方式……
[/Quote]

真是无语了。。。。
你还是自己好好的了解一下cookie吧。
代码小天王 2012-06-14
  • 打赏
  • 举报
回复
那如果我在客户端伪造一个记录Name的cookie,是别人的用户名,然后我进入主页面不是自动登录了么,那么不是会取到别人的信息,那密码不是也改了么
[Quote=引用 21 楼 的回复:]

访问网站时,判断COOKIE 假设COOKIE中存有两个值 Name(登录名) 标识状态(0-无需操作 1-自动登录)

如果Name不为空当且仅当标识为1 则直接登录,无需密码,根据登录名获取用户信息即可

否则转向登录页

那么这时登录时的操作:登录成功验证后,写SESSION,写COOKIE,如果选择了自动登录(比如记住我等),更新COOKIE标识状态为1(标识状态为1也只能……
[/Quote]
  • 打赏
  • 举报
回复
访问网站时,判断COOKIE 假设COOKIE中存有两个值 Name(登录名) 标识状态(0-无需操作 1-自动登录)

如果Name不为空当且仅当标识为1 则直接登录,无需密码,根据登录名获取用户信息即可

否则转向登录页

那么这时登录时的操作:登录成功验证后,写SESSION,写COOKIE,如果选择了自动登录(比如记住我等),更新COOKIE标识状态为1(标识状态为1也只能是通过验证后更新。是安全的。)

最后COOKIE加密,当然即便破解了,也没有密码
whatisma 2012-06-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

另外 其实你根本就不需要保存用户的密码 甚至账号信息都不要 而是保存一个token就可以了
最简单无聊的做法之一就比如:用户登录的时候 直接生成一个guid(无脑吧?) 把……
[/Quote]
楼主的本意就是减少同数据库的匹配次数,你生成guid还是要去匹配。
1#的方法是可以减少匹配次数了,但却无法处理别人盗用该cookie后登陆的问题和一些用户状态改变如客户被禁止登陆或密码修改等问题。
gzw13999 2012-06-14
  • 打赏
  • 举报
回复
建议 session 过期就做做匹配,我的做法是 用户Id + 二次MD5+DES加密的密码
g4_magicvr 2012-06-13
  • 打赏
  • 举报
回复
这样搞基本上绝对没人能伪造cookie(包括你自己在内)
因为你自己都不会知道token应该是什么~
g4_magicvr 2012-06-13
  • 打赏
  • 举报
回复
我纯粹只是想说:

- -不要相信这些可爱的孩子的建议
“自己写一套加密方法”是这个世界上最天真可笑的建议 没有之一
除非你自己是顶尖的数学家 否则你设计的任何算法都不会有现在市面上正在使用的加密算法安全性更好

另外 其实你根本就不需要保存用户的密码 甚至账号信息都不要 而是保存一个token就可以了
最简单无聊的做法之一就比如:用户登录的时候 直接生成一个guid(无脑吧?) 把用户的账户和这个guid存在一个地方(服务器上的 数据库啊还是神马的自己看着办) 然后把token写到用户的cookie里面去

用户在此访问的时候拿cookie里面的token去找这家伙的记录在不在 有没过期 如果答案是OK 自动登录 如果不OK 让他该干嘛干嘛去
gzpepco 2012-06-13
  • 打赏
  • 举报
回复
是的。账号+密匙再MD5。

[Quote=引用 8 楼 的回复:]
客户端保存账号肯定是明文保存卅,你的意思是cookie里保存一个字符串,字符串由账号+密码构成,然后每次去匹配账号和这个加密的字符串?

引用 1 楼 的回复:

账号你可以明文保存在COOKIE
然后再保存一个 MD5(账号+密匙)的值,密匙是一个不让人知道的字符串
这样就可以直接从COOKIE明文获取账号,但记得要做对比,除非知道密匙,否则不能伪造的。
而且这样也不用读数据库。
……
[/Quote]
加载更多回复(9)

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧