相关疑难解决方法(0)

Web应用程序中的身份验

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

python authentication web.py

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

mysql:错误代码[1267]; 操作'='的非法混合排序(latin1_general_cs,IMPLICIT)和(latin1_swedish_ci,IMPLICIT)

我想让password我的User表的列case sensitive在mysql中.

以下是该表的描述:

/*Table: mst_user*/

   FIELD          TYPE          COLLATION        
-------------  ------------  -----------------
user_id        VARCHAR(100)  latin1_swedish_ci
first_name     VARCHAR(25)   latin1_swedish_ci
last_name      VARCHAR(25)   latin1_swedish_ci
USER_PASSWORD  VARCHAR(50)   latin1_swedish_ci
user_status    INT(11)       (NULL)           
version_id     INT(11)       (NULL)           
active_status  INT(11)       (NULL)           
user_type      INT(11)       (NULL)    
Run Code Online (Sandbox Code Playgroud)

为了使USER_PASSWORD字段区分大小写,我执行以下查询:

ALTER TABLE `mst_user` MODIFY `USER_PASSWORD` VARCHAR(50) COLLATE `latin1_general_cs`;
Run Code Online (Sandbox Code Playgroud)

这种方法很有效,现在该字段区分大小写.

但我有一个存储过程,它SELECT在此表上执行查询以检查用户是否存在给定的凭据.

存储过程::

CREATE PROCEDURE `usp_password_verify`(ip_login_id         VARCHAR(200),
                                 ip_user_password    VARCHAR(200),
                                INOUT success     INT(1),
INOUT tbl_usr_password          VARCHAR(100),
INOUT  pkg_user_password         VARCHAR(100))
BEGIN
  SELECT COUNT(*)
    INTO success
    FROM mst_user
   WHERE UPPER (user_id) …
Run Code Online (Sandbox Code Playgroud)

mysql sql mysql-error-1267

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

如何获得两个字符串之间的相似性?

我想创建一个函数,如果对帐户进行多次强力尝试,它将提醒用户.如果字符串匹配超过75%,该函数将提醒用户.我执行了这个:

function Password_Match ($String, $Stored_Password){
    $New_String = str_split($String);
    $New_Stored_Password = str_split($Stored_Password);
        $Match = 0;
    foreach ($New_String AS $Value){
        if (in_array($Value,$New_Stored_Password)){
            $Match++;
        }
    }
    return $Match;

}

$String = "Test";
$Pass = "Tesst";
echo Password_Match($String,$Pass);
Run Code Online (Sandbox Code Playgroud)

这返回4,但我的代码中显然存在一个缺陷,我无法找到解决方案.承诺将是辉煌的.

php security

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

.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
查看次数

在 express nodejs 应用程序中更新待办事项列表而不刷新页面

我是 express nodejs 应用程序的新手。我想做一个待办事项清单。这是目前为止的样子。我的问题是当我添加待办事项时,由于它重新加载页面,因此需要一些时间来显示更改。如何在不重新加载页面的情况下实时查看更改。提前致谢。

tasks.jade中

 h1= title

  .list
    .item.add-task
      div.action
        form(action='/tasks', method='post', id='12345')
          input(type='hidden', value='true', name='all_done')
          input(type='hidden', value=locals._csrf, name='_csrf')
          input(type='submit', class='btn btn-success btn-xs', value='all done')
      form(action='/tasks', method='post')
        input(type='hidden', value=locals._csrf, name='_csrf')
        div.name
          input(type='text', name='name', placeholder='Add a new task')
        div.delete
          input.btn.btn-primary.btn-sm(type="submit", value='add')
    if (tasks.length === 0)
      | No tasks.
    each task, index in tasks
      .item
        div.action
          form(action='/tasks/#{task._id}', method='post')
            input(type='hidden', value=task._id.toString(), name='id')
            input(type='hidden', value='true', name='completed')
            input(type='hidden', value=locals._csrf, name='_csrf')
            input(type='submit', class='btn btn-success btn-xs task-done', value='done')
        div.num
          span=index+1
            |. 
        div.name
          span.name=task.name + ' (Created …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous node.js express mean-stack

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

使用 Rack::Attack 防止快速登录尝试

我们一直在阅读基于表单的网站身份验证权威指南,目的是防止快速登录尝试。

这方面的一个例子可能是:

  • 1 次尝试失败 = 无延迟
  • 2 次失败尝试 = 2 秒延迟
  • 3 次失败尝试 = 4 秒延迟
  • 等等

指南中出现了其他方法,但它们都需要一个能够记录以前失败尝试的存储空间。

作为可能的解决方案,在本期的其中一篇文章中讨论了阻止列表(以旧名称 blacklisting 在文档中更改为阻止列表)。

根据 Rack::Attack 具体而言,一个简单的实现示例可能是:

登录失败的地方:

StorageMechanism.increment("bad-login/#{req.ip")
Run Code Online (Sandbox Code Playgroud)

在 rack-attack.rb 中:

Rack::Attack.blacklist('bad-logins') { |req|
    StorageMechanism.get("bad-login/#{req.ip}")
}
Run Code Online (Sandbox Code Playgroud)

这里有两个部分,如果它被列入阻止,则返回响应并检查之前是否发生了失败的尝试(StorageMechanism)。

第一部分,返回响应,可以由 gem 自动处理。但是,我没有看到第二部分那么清楚,至少对于 gem 和 Rails 世界的缓存后端的事实上的选择,Redis。

据我所知,Redis 中过期的键会被自动删除。这将使得无法访问信息(即使已过期),为计数器设置一个新值并相应地增加不应期的超时。

有没有办法用 Redis 和 Rack::Attack 来实现这一点?

我在想,在这种情况下,“存储机制”可能必须保持绝对不可知,并且对 Rack::Attack 及其存储选择一无所知。

ruby security rack ruby-on-rails rackattack

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

PHP中的永恒会话

是否可以将PHP会话配置为永不过期?我目前在php.ini中设置了默认的24分钟 - 我可以解决这个问题长达几周或类似的问题,但我想知道我是否可以将它们设置为无限生命?

我想实现与Stackoverflow类似的效果:我从来没有必要在这里登录.这是通过永不过期的会话或其他方式在SO上实现的吗?

此外,作为第二个问题:过期的会话文件如何清理?如果有人创建了一个会话并且永远不会返回,那么哪个进程正在清理其过期文件?

php session

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

在cookie中散列密码

网站安全:用户登录新鲜或密码从cookie中提取并登录(如果煮熟的密码无效,则拒绝).+多次登录失败会导致拒绝.

密码是md5哈希并用随机数盐化.

我的问题是,这不合适吗?

我明白这不是很安全.有人可以访问用户的cookie,破解散列cookie,然后知道用户密码.

但是,它是否相当安全,并且在任何地方存储纯文本密码都是不道德的,这在某种程度上是不道德的吗?

php security passwords cookies hash

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

改进登录系统

我有四个不同类型的用户登录我公司网站一样admin,superadmin,company,和employees.他们每个人都有不同的页面集,但也有一些常见的页面.现在,我有四个不同的表具有相同的登录界面来管理它们adminsuperadmin.当其中一个adminsuperadmin登录时,我会先去检查两个表,然后才能访问.我有一个单独的登录屏幕companyemployees.这是接受的做法吗?

实际上,我希望将其更改为包含其中所有用户的单个表以及用于区分角色的角色表.我相信四桌概念真的很糟糕.我不能简单地将其设置为一个表,因为之前的开发人员习惯于在网站上使用的文本文件中保存用户注释和用户活动.

我是否认为四桌登录系统不好?将日志存储在直接在网站中使用的文本文件中是否有好主意?

php logging acl login

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

如果用户尚未登录,如何将用户重定向到登录页面?

我的登录页面login.php有以下代码:

<form method="post" action="confirmLoginCredentials.php">
<h2>LOGIN</h2>
    <p>Username: <input type="text" name="username" /></p>
    <p>Password: <input type="password" name="password" /></p>
    <p><input type="submit" name="submit" value="Login" /></p>

</form>
Run Code Online (Sandbox Code Playgroud)

提交后,它重定向到confirmLoginCredentials.php,它是:

 <?php

$username = mysql_real_escape_string($_POST['username']); 
$password = mysql_real_escape_string($_POST['password']);

require_once 'config.php';
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$q = "SELECT first_name, last_name FROM users WHERE user_name = '$username' AND password = '$password'";

$result = $mysqli->query($q) or die(mysqli_error($mysqli));


if (!mysqli_num_rows($result) == 1) {
    header("Location: login.php");  
    }
else {
    setcookie('authorized', 1, 0);
    header("Location: index.php");
}

?>
Run Code Online (Sandbox Code Playgroud)

这很好用,如果用户已成功登录,它会将用户重定向到索引页面.如果用户尚未登录,如何将用户重定向到我网站中所有页面的login.php页面?(换句话说,如果用户没有登录,用户就无法访问我网站的内容)我应该在我网站的所有其他页面中添加哪些代码来执行此操作?

任何帮助将非常感谢!! 谢谢!!

php mysql redirect mysqli login

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