Cel*_*tas 17 php security authentication
这是我控制网站身份验证的代码.我不确定我的逻辑是否正确.如果用户名和密码正确,则会发生以下情况:
if(session_start())
{
session_regenerate_id(true);//without this the session ID will always be the same
$_SESSION['loggedInUser'] = $uName;
echo 'You are now logged in';
}
else echo 'Right password/username but session failed to start';
Run Code Online (Sandbox Code Playgroud)
后续页面检查用户是否已登录
session_start();
if(isset($_SESSION['loggedInUser'])
{
//rest of page
}
else echo 'you must log in';
Run Code Online (Sandbox Code Playgroud)
退出时我有
session_start();//if I don't have this the next line produces an error
session_unset();//destroys session variables
session_destroy();//ends session
Run Code Online (Sandbox Code Playgroud)
我红了不要在注销时调用session_start()但是如果我没有它那里我得到消息Trying to destroy uninitialized session.我怎样才能解决这个问题?
是否建议根据IP地址和用户代理创建指纹?我认为它很糟糕,因为多台计算机可以共享相同的IP地址(例如计算机实验室),并且所有流量都通过代理,同一台计算机可以更改它的IP地址(如果它是动态的).另一方面,这种情况多久发生一次?可能值得阻止所有会话劫持的少数阻止有效用途.
即使您可以推荐信誉良好的文章,我也应该阅读以了解这个主题,这将是非常好的,谢谢.
5/6答案的投票少于0 :(可能会对选民发表评论,所以我知道该注意什么?
roo*_*ook 26
首先,您应该阅读Mozilla WebAppSec安全编码指南 - 会话管理和OWASP A3破坏的身份验证和会话管理.您可以配置PHP的会话处理程序以满足这些要求.
您应该防止的第一个缺陷是A9-传输层保护不足.简而言之,您不希望有人使用像Firesheep这样的工具劫持会话.可以通过强制浏览器仅通过https发送会话ID来防止此攻击:
session.cookie_secure=1
Run Code Online (Sandbox Code Playgroud)
您可以通过设置httponly标志来阻止攻击者使用XSS获取会话ID :
session.cookie_httponly=1
Run Code Online (Sandbox Code Playgroud)
您始终希望使用Cookie来存储会话ID.如果可以使用GET或POST变量传递会话ID,则攻击者可以使用会话固定攻击来劫持会话.另一种思考此攻击的方法是,您不希望攻击者为其他用户创建会话:
session.use_cookies=1
session.use_only_cookies=1
Run Code Online (Sandbox Code Playgroud)
接下来,您要确保从CSPRNG获得至少128位的熵.在*nix系统下,您可以使用/dev/urandom:
session.entropy_file="/dev/urandom"
session.entropy_length=16
Run Code Online (Sandbox Code Playgroud)
会话处理程序不是一切.您仍然需要担心跨站点请求伪造攻击(又称CSRF或"会话骑行")和跨站点脚本(XSS).XSS可用于破坏CSRF保护(即使使用http_only cookie!). 攻击者也可以使用点击劫持来执行未经授权的操作.
设置这些配置选项后,只需调用即可session_start().至于session_destroy()用户注销时破坏会话调用,就这么简单!
| 归档时间: |
|
| 查看次数: |
10296 次 |
| 最近记录: |