相关疑难解决方法(0)

使用Play Framework和Scala进行Restful(和Stateless)Auth

我最近一直在考虑如何正确地使用我的webframework/application-stack.我正在慢慢转向scala和函数式编程(来自Python和CherryPy).因此,调查Play是很自然的,因为它是最广泛支持的框架(现在即使是Typesafe也采用了它).如果我在这里遗漏了什么,请随意纠正我.

因此,游戏真正拥抱无状态webapps的想法,我很难在身份验证和授权方面解决它.现在经过一些在线挖掘(基于表单的网站身份验证的权威指南)后,我得出的结论是,必须对我的后端(JSON-RPC或其他)的每次调用进行身份验证和授权,远离旧会话 -饼干的想法.

现在有什么最好的方法来实现今天的技术?

那怎么样:

我想到了"简单"DigestAuth,因为它被证明并且广泛存在但是它对旧的和生锈的基本认证有类似的感觉.

谢谢!

authentication stateless playframework-2.0

6
推荐指数
1
解决办法
3271
查看次数

为什么挑战 - 响应方法对于忘记密码的解决方案很糟糕?

我的公司正在开发一个在线人力资源和薪资应用程序,在这个应用程 我很清楚如何锁定大多数身份验证/授权过程,"忘记密码"页面除外.

我的初步计划是要求用户同时输入电子邮件地址和对先前选择/输入的质询问题的回复,并将临时密码邮寄到列出的电子邮件中(假设电子邮件有效).但我已经在这里这里(都在SO上)读到挑战 - 响应方法是不安全的.

如果我们只是通过电子邮件发送临时密码,那真的是不安全吗?我能想到的唯一更安全的选择是要求用户致电他们的客户服务代表,这将给我们的员工带来很大负担.

我错过了什么...有更好的方法吗?谢谢!

security authentication forgot-password

5
推荐指数
1
解决办法
2600
查看次数

php中面向对象登录系统的类设计

在构建网站时,我已经开始通过解决一些相当容易的问题来提高我的OOP技能.所以它从一个登录系统开始,我已经按照youtube上的一个教程,帮助我创建了一个Login类,但是随着它的继续,它引起了许多疑虑(顺便说一句.代码是100行所以我会传递它粘贴它).

所以在这个Login类中,有一些验证方法等,但它有一个会话验证点,在构造之前给定的参数,它不能被使用(至少在这个类范围内):

    $this->_username = ($this->_login)? $this->filter($_POST['username']) : $_SESSION['username'];
    $this->_password = ($this->_login)? $this->filter($_POST['password']) : '';
    $this->_passmd5 = ($this->_login)? md5($this->_password) : $_SESSION['password'];
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下,当没有设置会话变量时,我不能使用verifySession()方法(例如,不同的记录用户应该在主页上看到什么).

所以我的问题是 - 设计是否正确,我应该如何构建其他登录系统:在每个页面上登录验证并注销 - 如果它们中的每一个都处于单独的类中(那么方法,在特定类中重复,我应该继承它们吗?我意识到OOP有不同的方法,但是有什么特别的,我应该作为一个初学者(这将帮助我理解最好的oop).

php oop login-system

5
推荐指数
1
解决办法
8069
查看次数

使用永久登录Cookie时,如何对照DB中的bcrypt哈希令牌检查Cookie令牌?

这种流行的持久登录Cookie 解决方案中该解决方案涉及生成随机的128位“令牌”以保存在用户的Cookie中,Jens Roland建议:

并且不要将永久性登录COOKIE(令牌)存储在您的数据库中,仅是一种哈希!登录令牌是等效的密码,因此,如果攻击者将您的手放在您的数据库上,则他/她可以使用这些令牌登录到任何帐户,就像它们是明文登录密码组合一样。因此,在存储持久性登录令牌时,请使用强盐散列(bcrypt / phpass)。

但是,当您对Cookie令牌进行加密时,您将如何对照数据库中的加密令牌来检查Cookie令牌以确认Cookie登录有效?(因为加密始终使用随机盐)?

换句话说,您将无法对Cookie令牌进行bcrypt加密,然后在数据库中寻找匹配项,因为您将永远找不到匹配的令牌,因此,如何按照推荐的解决方案将其与数据库中的哈希版本进行实际匹配(“服务器保留一个由数字->用户名关联组成的表,该表将被查找以验证cookie的有效性。

编辑:

请记住,按照上面链接的推荐解决方案,单个用户可以为不同设备使用多个 Cookie /令牌。我提到这是因为提交了一个答案(此答案已被删除),它假定每个用户只有一个令牌。

php mysql cookies login bcrypt

5
推荐指数
1
解决办法
1048
查看次数

是否可以设置session.gc_maxlifetime> 65535秒

目前我session.gc_maxlifetime的设置为默认值,因此为1440秒.

我想设定maxlifetime为一个月,4*7*24*60*60秒.但是,我在php.net上看到最大值session.gc_maxlifetime是65535.

难道不可能将我设置maxlifetime为65535秒以上吗?

php session

5
推荐指数
1
解决办法
5920
查看次数

基于浏览器的OAuth/OpenID,具有持久登录功能

我们有一个基于cookie的auth的常规Web应用程序,现在我们想要分割前端和后端(api)以便拥有第三方公共API.所以我们的后端将在一个域上并在另一个域上前端.

对于授权,我们希望使用JWT切换OAuth 2.在这种情况下,我们的前端应用程序将不得不使用access_token而不是cookie会话,它带来了一个很大的问题:

如何保持登录状态 - 臭名昭着的"记住我"复选框(来自基于表单的网站身份验证的第二部分)

从OAuth2的角度来看,我们的前端应用程序将在资源所有者密码凭据授予隐式授权之间使用某些东西.它更接近密码凭证授予,因为我们仍将使用通常的登录表单,并且不会将用户重定向到另一个域以便登录.同时它更接近隐式授权,因为它将全部仅限浏览器基于JavaScript的时间access_token将保存在浏览器中.

RFC 如果你使用隐式授权,授权服务器不能发出刷新令牌,而我的问题是,如果你没有真正使用3-d party OAuth而你自己的api,它在这个用例中是否仍然有效?本能地,我觉得refresh_token在浏览器中有一个安全漏洞,并想与你们确认,但这refresh_token似乎是持久登录工作方式与我们使用cookie一样的唯一方法.


@FlorentMorselli评论后的UPD:

如果我可以使用refresh_token仅浏览器应用程序,OpenID规范仍然无法回答我的问题

  • 谷歌表示他们refresh_token只提供access_type=offline
  • OpenID Connect Core 表示您无法使用带有隐式流的刷新令牌
  • ID连接核心任何关于使用refresh_token与混合流程
  • 只有一个地方可以说出refresh_token混合流动的一些前景,但并不精确

UPD2感谢@reallifelolcat

看起来OpenID Connect没有明确支持资源所有者密码凭据授权,这意味着您必须将用户重定向到OpenID Connect服务器才能执行登录.您是否知道是否有其他方法可以通过OAuth 2.0对用户凭据进行身份验证?


我相信分裂api和前端这些日子变得越来越普遍,如果你分享如何解决这个持久登录问题,如果你完全放弃并强迫用户每X周重新登录,我会很感激.

谢谢!

openid rest oauth oauth-2.0 jwt

5
推荐指数
1
解决办法
2658
查看次数

如何在 PHP 中记住我(cookie)

我正在制作一个登录页面。所以我已经可以登录到另一个页面了。然后在我的登录页面中,我需要将记住我复选框和 PHP。那么我需要在代码中的哪个部分放置我的“记住我”代码?请帮我。

这是 login1.php

<?php
session_start();
//database connection
$servername     = "localhost";
$username       = "root";
$password       = "";
$dbname         = "lala";

// Create connection
$link = mysql_connect($servername,$username,$password) or die("Could not connect");

$db= mysql_select_db("$dbname",$link) or die ("Could not select database");

$login = $_POST['login'];
$password = md5($_POST['password']);
$rememberme = $_POST['remember_me'];

$result = mysql_query("SELECT * from admin WHERE working_id = '$login' and password = '$password'");
$count = mysql_num_rows($result);

if($count==1)
{
    //check remember me is on or off
    //if off then session login
    //else add …
Run Code Online (Sandbox Code Playgroud)

php cookies

5
推荐指数
1
解决办法
3万
查看次数

将服务器端和客户端身份验证与WebAPI结合使用

我有一个遗留的ASP.NET webforms应用程序,用户通过服务器端处理的表单登录.如果输入的用户名+密码与数据库中的凭证匹配,我会在会话中设置一些值(例如,当前用户ID)并在Response.Redirect之后执行.我也创建了一个HttpCookie,用于"下次访问时自动重新启动"功能.

目前,我还在该Web应用程序中添加了WebApi支持.我设法实现了令牌身份验证,允许我在客户端登录.

如何结合两种身份验证方法?我希望用户输入一次凭据,在服务器端进行身份验证,在客户端进行身份验证后将用户重定向到另一个页面.

c# asp.net authentication session asp.net-web-api

5
推荐指数
1
解决办法
571
查看次数

通过ajax登录和注册是否安全?

我的 JS 代码(举个例子,可能有一些语法错误)

$(document).on('click','#btnEdit',function(e){ 
    var id = $("#inp_id").val(), ps = $("#inp_ps");     
    $.ajax({
        type: 'POST',
        url: 'http://example.php',
        data: {act:'#LogIn',id:id,ps:ps},
        success: function(response){
            if($.trim(response) === "success"){
                alert("Login Successful");   
            }
            else{
                alert("Invalid ID or Password");
            }
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

在 php 里面

if($_POST[act] == "#LogIn"){
    $userid = Encrypt($_POST[id],$key1);
    $userps = hashPS($_POST[ps],$salt);
    //query...
    if(result > 0){
         $_SESSION['id'] = Encrypt($userid,$key2);
         $_SESSION['token'] = //random code;
    }
}
Run Code Online (Sandbox Code Playgroud)


我的问题:

有没有办法使代码安全?因为我认为攻击者可以编写自己的脚本并将数据发送到 php 以获取和 id。或者也许使用ajax登录和注册只是一个坏主意。

javascript php ajax

5
推荐指数
1
解决办法
568
查看次数

PHP会话足够用户身份验证吗?

场景:

  • 用户登录后,会设置会话变量以确认其登录.
  • 在每个页面的顶部,登录会话变量被确认有效
  • 如果不是,他们就会被淘汰出局.
  • 不使用持久性cookie session

题:

这是一个足够强大的安全措施本身,还是我应该

  • 设置两个会话变量以验证彼此和/或
  • 实现数据库/哈希验证
  • ...?

========

(顺便说一句,在我研究这个问题时,这个wiki是一个很棒的读物.)

php security session login

4
推荐指数
1
解决办法
3999
查看次数