玩蛇网提供最新Python编程技术信息以及Python资源下载!
您现在的位置: 玩蛇网首页 > Python问题解答 > 正文内容

Python编程用户发贴cookie id等问题求解

初学web编程,有些问题不是很理解:

假设用户已登录,然后发帖。在发帖表单中,我有一个隐藏的表单,value是当前登录用户的id,用户提交后该id将作为作者的字段写入数据库。

但是,当用户将这段id改成其他用户的id,一样可以成功写入,这样帖子就变成别人发布的了。于是,我就想把当前用户的id保存在cookie里,不知道这种方法是否可行?

如果按照上面的方法,假设用户修改了cookie的id,那岂不是也可以伪造他人发帖了?

做登录就别用cookie了,用session吧,cookie存在客户端,可以被任意修改,session存在服务器端,相对安全。
web登录通常在用户登录后将userid写到session里面,在用户发帖提交后,直接从session取出userid存入数据库。
永远不要相信用户输入的数据。

简单分析一下你说的问题:
用户在发帖的时候,伪造一个其他合法用户的身份标识,来与服务器端进行交互。这在密码学中叫仿冒攻击(仿冒者可以是非法用户或者其他的合法用户)。其中发帖这个动作可以抽象成与服务器端的所有涉及到身份验证的交互。这个问题不仅仅只存在于Web编程。通常来说,你的登录问题解决了,这个问题也就不是问题(因为在合法用户的每一次交互中,服务器端必定有可以标识该次请求来源身份的信息)。

下面说一下解决方法:
在Web编程中,服务器端会维持一个session,用于标识每个用户的身份信息,这个session在同一用户的每次请求中都可以获取到。对于一些关键的操作,往往会根据当前的时间戳和服务器端session中保存的用户身份信息生成一个token,用以唯一标识当前操作,当用户发帖时,这个token会提交到服务器,服务器端再从session中取出用户的身份信息按照同样的算法生成token,二者进行比较,一致则允许提交,否则拒绝。
对于客户端编程,原理是一致的。只是用户身份信息在服务器端存储的地方不同而已。

思路完全错了。

表单提交时用户信息绝对不能用客户端提交过来的信息

通常的做法是:使用request.cookie保存用户已登陆后的信息。比如说用户登录部分的代码

def login(username, password):
    do_login_here(username, password)
    request.cookie['is_login'] = True
    request.cookie['login_username'] = 'some_username'

然后在接收POST的函数里

def take_post(request):
    validate_user(request)
    validate_post(request)
    save_post(request)

另外,关于用户注册、邮箱验证、用户登录、用户注销等一系列动作,强烈推荐Flask-Security这个神器。真是谁用谁知道啊…

我没怎么写过web 程序,我觉得这个问题可能可以这样解决:

  • 用户登录时随机生成个什么什么值,存到cookie里
  • 发帖时传这个cookie 跟你服务端存的值做比对,来判断是哪个用户

一般会使用session

登录成功后多存一个$token1到cookie中,这个$token1是根据用户信息(比如帐号、密码、useragent等)生成的加密字符串

之后
根据cookie中的uid在数据库中查出用户生成$token2
用cookie中存的登陆时生成$token1与$token2对比,如果对比相等就证明可信了。

我一般都放到memcached层,速度还快 木有多余文件 到时间一样过期,然后获得的隐藏表单可以做对比,当然也可以直接用memcached获取的数据,要是做对比的话 你用正则过滤下除了数字之外的字符(用户id一般都是数字),避免sql.
永远不要相信用户输入的数据

设计的时候应该做一个加密字符串用于验证

发帖信息在服务端加进去,值是session id获得的,别人无论怎么改都无法更改你服务端信息吧。

玩蛇网文章,转载请注明出处和文章网址:http://www.iplaypy.com/wenda/wd20378.html

相关文章 Recommend

玩蛇网Python互助QQ群,欢迎加入-->: 106381465 玩蛇网Python新手群
修订日期:2017年06月01日 - 17时11分52秒 发布自玩蛇网

我要分享到:

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules