相关疑难解决方法(0)

结合cookie和会话

这个问题是我今天关于cookie的各种问题的结果.

如您所知,使用cookie处理登录过程并不节省.

但是,如何在登录时设置cookie并在重新启动浏览器时自动登录?

如果我根据cookie的存在重定向,这是危险的,因为其他人可以创建一个cookie.那么解决这个问题的方法是什么?

php cookies session

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

哈希密码永远不会脱盐

我正在使用flask微框架并使用msyql后端手动设置身份验证.

我的sql脚本在此数据类型中存储散列密码:VARCHAR(50)generate_password_hash函数生成之后:

  `Password` VARCHAR(50) NOT NULL ,
Run Code Online (Sandbox Code Playgroud)

我认为VARCAHR(50)绰绰有余......

这些是我正在使用的以下库:

from werkzeug import check_password_hash, generate_password_hash


@app.route('/login/', methods=['GET', 'POST'])
def login():
    """Logs the user in."""
    if g.user: return redirect(url_for('main'))
    error = None
    if request.method == 'POST':
        sql = "select password, userid from users where username = " + stringify(request.form['username'])
        cursor = g.db.cursor()
        cursor.execute(sql)
        user = cursor.fetchall()
        user = user[0]
        password = user[0]
        userid = user[1]
        if user is None:
            error = 'Invalid username'
        elif not check_password_hash(password, request.form['password']):
            error …
Run Code Online (Sandbox Code Playgroud)

python mysql passwords flask

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

为什么要存储持久登录cookie和密码重置令牌的哈希值?

我刚读了以下内容:

并且不要在你的数据库中存储持久的登录COOKIE(令牌),只是它的一大堆!登录令牌是密码等效,因此如果攻击者抓住您的数据库,他/她可以使用令牌登录任何帐户,就像他们是明文登录密码组合一样.因此,在存储持久登录令牌时使用强盐水散列(bcrypt/phpass).

(在这个答案中:https://stackoverflow.com/a/477578/943102)

我认为应该使用哈希,因为人们在多个站点上使用相同的密码,它可以防止攻击者侵入同一用户的其他帐户.由于登录令牌是随机值,因此在这种情况下不存在此风险.我显然遗漏了一些东西,但我找不到任何关于此的进一步信息.有人可以解释一下吗?

security passwords session forgot-password password-recovery

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

无休止的会话:有安全风险吗?

我正在开发的一个遗留应用程序让用户填写大量问题,并在调查问卷的最后批量保存答案。该过程很漫长,并且典型的用户可能会在某个时刻经历超时。

该团队提出了通过无休止的会话来绕过这个问题的想法。经过一番谷歌搜索后,我发现很多文章解释了如何增加超时;但是我没有看到揭露这种做法风险的文章。乍一看,我觉得设置超时是合理的。

我的问题是:

  • 您认为无休止的会话可能会带来安全风险吗?
  • 如果是这样,这种做法会带来哪些典型风险?

security session

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

PHP中使用$ _POST和$ _GET变量的最佳实践

考虑到一个项目将工作多个开发人员并且将不断更新和维护,考虑到可读性和安全性,下面两个代码中的哪些代码可以被认为是PHP中的最佳实践?如果我们谈论性能,第二种选择可能会好一点,但有办法解决这一点.

选项1

$user = $_POST['user'];
$pass = $_POST['pass'];

// Prevent SQL Injection and XSS
$user = anti_injection($user);
$pass = anti_injection($pass);

if(strlen($user) <= 8 && strlen($pass) <= 12)
{
    // SQL query
    $sql = "SELECT id 
            FROM users 
            WHERE username = '$user' AND password = '$pass';";
}
Run Code Online (Sandbox Code Playgroud)

选项2

// Retrieve POST variables and prevent SQL Injection and XSS
$_POST['user'] = anti_injection($_POST['user']);
$_POST['pass'] = anti_injection($_POST['pass']);

if(strlen($_POST['user']) <= 8 && strlen($_POST['pass']) <= 12)
{
    // SQL query
    $sql = "SELECT id …
Run Code Online (Sandbox Code Playgroud)

php postgresql optimization

2
推荐指数
1
解决办法
2834
查看次数

检查登录详细信息的最佳查询(用户名和密码)

哪个是检查MySql数据库中是否存在用户名和密码的最佳查询.

1)SELECT * FROM login_details WHERE username='username' AND password='password'
2)SELECT count(*)FROM login_details WHERE username='username' AND password='password'
3)SELECT count(Username)FROM login_details WHERE username='username' AND password='password'
4)SELECT 1 FROM login_details WHERE username='username' AND password='password'
Run Code Online (Sandbox Code Playgroud)

谢谢

mysql optimization

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

PHP - 隐藏url(GET)参数

我的PHP/HTML链接如下:

<a href="http://search.mywebsite.com/login.aspx?checktype=uid&user=adam&password=pass1234&profile=dart&defaultdb=kts"> Log me into this website </a>
Run Code Online (Sandbox Code Playgroud)

当用户点击链接时,参数由第三方网站处理,该网站无缝地记录用户.

是否可以隐藏/屏蔽/伪装网址,以便用户在将参数传递到指定网站时看不到参数?

如果不是,你们会怎么做呢?我主要担心用户和密码params并需要隐藏它们.(用户=亚当&密码= pass1234)

我知道如何隐藏params的唯一方法是使用表单发布方法,但在这种情况下,它不是一个选项,因为我使用直接链接.

编辑: 对于那些一直建议使用POST方法的人,这不是一个选项,因为我没有使用表格,接收网站不受我的控制.我正在从一个站点登录到另一个站点(第三方)

php parameters post get

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

浏览器的本地存储有多安全?

      `$(function rememberMe() {

        if (localStorage.chkbx && localStorage.chkbx != '') {
            $('#remember-me').attr('checked', 'checked');
            $('#user').val(localStorage.usrname);
            $('#pass').val(localStorage.pass);
        } else {
            $('#remember-me').removeAttr('checked');
            $('#user').val('');
            $('#pass').val('');
        }

        $('#remember-me').click(function() {

            if ($('#remember-me').is(':checked')) {
                localStorage.usrname = $('#user').val();
                localStorage.pass = $('#pass').val();
                localStorage.chkbx = $('#remember-me').val();
            } else {
                localStorage.usrname = '';
                localStorage.pass = '';
                localStorage.chkbx = '';
            }
        });
    });
Run Code Online (Sandbox Code Playgroud)

我已经使用本地存储在登录页面上实现"记住我"功能,但我怀疑它是多么安全.我将密码存储在本地存储中,但我想使用更好的选项.加密不会有帮助,因为我必须在客户端发送解密脚本.还有其他选择吗?

javascript java jquery

2
推荐指数
1
解决办法
603
查看次数

Web应用程序中的身份验

我正在制作我的第一个网络应用程序(python + webpy + mongodb).制作认证模块的最佳方法是什么?我应该保存登录到cookie,还是只保留登录/传递变量?我是否必须使每个"限制"功能每次检查用户的权利?也许有关于这些事情的好文章?

python authentication web.py

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

.NET Web API密码重置

当用户忘记密码时,您不应通过电子邮件发送密码.在他的Pluralsight课程" Hack Yourself First:How to on the Cyber​​-Offense "中,Troy Hunt声称"SMTP上没有隐含的传输层安全性".信息安全堆栈交换的这个答案证实,以明文(包括通过电子邮件)发送或存储密码是一个坏主意.

似乎重置密码的正确方法是不立即重置密码.相反,通过电子邮件向用户发送限时激活链接.这需要用户的人工干预,并且在任何阶段都不通过电子邮件传递密码.

上述信息安全性答案描述了如何实现密码重置机制:

不要重置用户的密码,不管是什么- "复位"密码是用户记住,这意味着他/她必须要么改变它或将它写下来更难-说,在明亮的黄色便利贴的边缘了监控.相反,只需让用户立即选择一个新的 - 这也是他们想要做的事情.

如果用户忘记了密码,请使用存储在数据库中的随机生成的重置令牌向他们发送安全的一次性重置链接.令牌必须是唯一且保密的,因此在数据库中对令牌进行散列并在使用链接时对其进行比较.

基于表单的网站身份验证的权威指南同样描述了实现:

始终在数据库中散列丢失的密码代码/令牌.再次,此代码是密码等效的另一个示例,因此必须进行哈希处理,以防攻击者抓住您的数据库.当请求丢失密码代码时,将明文代码发送到用户的电子邮件地址,然后哈希,将哈希值保存在数据库中 - 然后丢弃原始密码.就像密码或持久登录令牌一样.

但是用户将如何真正知道新密码.是否重置为默认值?它是否更改为随机生成的密码,需要以某种方式与用户进行通信?

在" 首先攻击自己:如何进入网络攻击 "中,激活链接将您带到一个可以输入新密码的表单.

如果你正在处理一个网站,那么你可以进入并与网络应用程序交互并选择你自己的新密码.但是使用类似.NET Web API的东西,您正在与通常应该为您提供数据而非用户界面的控制器上的操作进行交互.你不能只是给他们一个链接,并期望他们用它做点什么.

因此,如果您正在通过Web API处理身份验证,那么允许用户重置密码并将新密码传递给他们的有效且安全的方法是什么?

security authentication passwords reset-password asp.net-web-api

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