关于保护网页的LightopenID

时间:2013-05-23 04:28:34

标签: php openid lightopenid

所以我有示例-google.php脚本工作,在登录后抛出默认用户字符串已登录。但我的问题是这是如何保护任何内容的?

假设我有//127.0.0.1/example-google.php,我在登录成功后添加了一个href到//127.0.0.1/abc.php。

那么是什么让人不能只输入127.0.0.1/abc.php?我可以使用$ _SESSION验证“某人”已登录。但这是否足够?有没有办法重新验证尝试访问abc.php的用户是否在从其他页面抛出时真正登录?

2 个答案:

答案 0 :(得分:1)

通常,我们的想法是您确实使用会话存储。

例如,在我的网站中,我使用Steam社区进行OpenID登录。当用户登录时,在LightOpenID示例的模式/验证检查等之后,我将他们的唯一标识符保存在会话存储中(在这种情况下是SteamID,在您的情况下可能是电子邮件地址),然后可以自由地使用它对于后续请求。

由于会话存储是服务器端的,用户无法在不获取会话cookie的情况下冒充另一个会话(会话劫持是其他人可以进行更详细的话题,但如果请求,我会给它一个镜头但是,大多数攻击都会因存储和验证请求的IP地址而失败。

答案 1 :(得分:0)

我保留了几个mysql表(一个用于会话,一个用于用户信息),并在会话表中存储会话信息,并包含对users表的引用。当用户使用其OID提供程序成功登录时,会通过提供程序的确认将其发送回我的站点。我通过他们的会话ID跟踪我的用户。

如果他们选择退出会话我会擦除会话,但会维护网站上的评论/帖子的用户信息,以跟踪谁说了什么。

我实际上放了一个链接到“?login = {service}”,它将请求发送到OID提供程序并重定向回该页面,并且从提供程序返回时它成功登录并存储相应的信息并重定向用户返回到原始页面,他们点击了“登录”按钮,无论哪个{service}。如果通过OID验证,您只显示“仅限会员”内容。您没有在abc.php上创建标准HTML页面而没有任何方式来确认ID,我认为标题重定向很重要,因为它清理了地址中显示的URL。