在过去的几天里,它一直在我的脑海中运行,但我读了一些关于如何使PHP会话更安全的文章.几乎所有这些文章都说你需要在会话中使用额外的盐来保存useragent.像这样的东西:
$fingerprint = md5('SECRET-SALT'.$_SERVER['HTTP_USER_AGENT']);
Run Code Online (Sandbox Code Playgroud)
盐会使攻击者更难以劫持或任何会话.但为什么每次检查时都加盐:
md5('SECRET-SALT'.$_SERVER['HTTP_USER_AGENT']) == $_SESSION [ 'fingerprint' ]
Run Code Online (Sandbox Code Playgroud)
因此,为什么盐会使它更安全,因为攻击者仍然只需要使用者(相对来说是一小组不同的使用者)和sessionid?
可能是我忽略的小东西,但无法弄明白,让我疯狂哈哈
谢谢!
我想用标准的Wordpress盐加密发送到数据库的密码,就像Wordpress在创建新用户时那样.我知道我可以在wp-config.php中找到我的盐.所以我不需要生成盐; 我只需要加密密码.
因此,当我创建mypassword0时,发送到数据库的是由我的Wordpress盐加密的文本字符串.
这是我的原始代码.(谢谢Yadav Chetan的帮助!)现在我只需要添加salt加密代码.
<?php
if(isset($_POST['submit'])){
$query = "INSERT INTO mytable_one
(user, pass)
VALUES
('".$_POST['user']."', '".$_POST['pass']."')";
$query = "INSERT INTO mytable_two
(fname, lname)
VALUES
('".$_POST['fname']."', '".$_POST['lname']."')";
mysql_query($query);
}else{
?>
<div class="content">
<form method="post">
<div><strong>First Name:</strong><span class="errortext">*</span></div>
<div><input id="first-name" name="fname" type="text" /></div>
<div><strong>Last Name:</strong><span class="errortext">*</span></div>
<div><input id="last-name" name="lname" type="text" /></div>
<div><strong>User:</strong><span class="errortext">*</span></div>
<div><input id="user-login" name="user" type="text" /></div>
<div><strong>Password:</strong><span class="errortext">*</span></div>
<div><input id="user-pass" name="pass" type="text" /></div>
<div><input id="submit-button" value="submit" type="submit" />
</div>
</form>
<?php }?>
Run Code Online (Sandbox Code Playgroud)
更新:
RRikesh建议我将mysql_*更改为WPDB代码.所以我尝试将其更改为wpdb,我还需要将其与其他代码集成.那么你可以帮我解决这个更新的代码吗?
<?php
if(isset($_POST['submit'])){ …Run Code Online (Sandbox Code Playgroud) 在这个小教程中,我将向您展示如何构建一个负责注册和登录的GWT模块.
密码用Sha256进行哈希处理并加盐.
这些是我用于密码加密和密码验证的一些功能.想知道这是否是处理它的好方法.我正在使用codeigniter框架.
这是'加密'的功能:
function crypt_pass( $input ){
$salt = substr(sha1(date('r')), rand(0, 17), 22);
$cost = 10;
$hash = '$2y$' . $cost . '$' . $salt;
$pw_and_salt['pw'] = crypt($input, "$hash");
$pw_and_salt['salt'] = $salt;
return $pw_and_salt;
}
Run Code Online (Sandbox Code Playgroud)
我将密码和盐存储在我的数据库中.这是登录功能:
function login(){
$this->db->select('salt');
$salt = $this->db->get_where('users', array('username' => $this->input->post('username') ) )->row();
$where = array(
'username' => $this->input->post('username'),
'password' => crypt( $this->input->post('password'), '$2y$10$' . $salt->salt),
);
$user = $this->db->get_where('users', $where)->first_row();
if (!$user) {
return FALSE;
}else{
if(!empty($user->activation)){
return 2;
}else if($user && empty($user->activation)){
$this->session->set_userdata('id',$user->id);
$this->session->set_userdata('username',$user->username);
$this->session->set_userdata('first_name',$user->first_name); …Run Code Online (Sandbox Code Playgroud) 盐的新手,我添加第一个服务器(wx-1),它的工作原理,但是当我添加一个不同的服务器时,test.ping是可以的,但是当执行时salt 'qing' state.highstate,它失败了,错误信息是:
No Top file or external nodes data matches found
Run Code Online (Sandbox Code Playgroud)
这是我的top.sls:
base:
'wx-1':
- bin.nginx
- git
- web
- mongo
- redis
'qing':
- bin.nginx
Run Code Online (Sandbox Code Playgroud)
qing是一个新的服务器,它的配置与wx-1不同,不知道这是否正常,谢谢你的帮助:)
Firebase提供"简单登录",其中使用电子邮件/密码进行身份验证.在存储密码之前,有没有人知道firebase盐和哈希密码?我认为firebase足够了解这一点,但我只是想确定一下,因为经过一个小时的搜索后我找不到任何东西.
预期的后续行动:如果firebase实际上没有加密+哈希密码,那么如果我使用用户密码,盐水+哈希值并将其传递到firebase进行存储/检查,那么简单登录是否有效?
提前致谢!
什么是使用存储在数据库中的随机盐渍密码的WildFly(8.2)方法?
是的实现org.jboss.crypto.digest.DigestCallback意味着有机会获得部分盐从数据库(在密码验证过程)?
或者我应该简单地将密码哈希并加密密码,然后再将其交给login方法HttpServletRequest?
按照本教程,我只是在使用 MySQL 和 Python 进行开发时学习如何保护密码。
我的理解是用户密码存储在散列的数据库中,而盐并没有加密存储,因此我们可以获取散列的密码和盐,并使用盐重新散列输入的密码,然后比较两者。
但是,当使用 PBKDF2(通过passlib.hash.sha256_crypt()函数)时,我不能设置自己的盐,只能设置它的大小。那么如何使用相同的盐重新哈希密码,以便我可以比较两者?
我一直在阅读有关保护数据库中用户密码的信息(https://crackstation.net/hashing-security.htm)。基本概念已被理解-生成一个随机的Salt,将其附加到密码并哈希密码。
所以这就是我所做的(我没有在这里放一些可以转换为字符串的方法):
RandomNumberGenerator randomNumberGenerator = RandomNumberGenerator.Create();
byte[] rndBytes = new byte[512];
randomNumberGenerator.GetBytes(rndBytes);
string salt = ToHexString(rndBytes);
var sha512Hasher = SHA512.Create();
string hashedPwd = ToHexString(sha512Hasher.ComputeHash(GetBytes(pwd + salt)))
Run Code Online (Sandbox Code Playgroud)
根据这篇文章,这是安全的,但通过使用“键扩展”可以更加安全,据我所知,“键扩展”对哈希的执行速度较慢(使用参数),使暴力破解密码的难度加大。
所以这就是我所做的:
RandomNumberGenerator randomNumberGenerator = RandomNumberGenerator.Create();
byte[] salt = new byte[512];
randomNumberGenerator.GetBytes(salt);
Rfc2898DeriveBytes k1 = new Rfc2898DeriveBytes(user.Password, salt, 1000);
byte[] hashBytes = k1.GetBytes(512);
string hash = ToHexString(hashBytes);
Run Code Online (Sandbox Code Playgroud)
现在这是我的问题:
SHA512和之间有什么区别Rfc2898DeriveBytes?哪个更安全?编辑(另一个问题)
我已经查看了与此相关的所有 StackOverflow 问题,但我似乎无法弄清楚这一点。当我对密码进行散列并对其自身进行检查时,它会使用当前代码返回 TypeError“Unicode 对象必须在散列之前进行编码”:
from scripts import tabledef
from flask import session
from sqlalchemy.orm import sessionmaker
from contextlib import contextmanager
import bcrypt
(Unrelated Python code...)
def hash_password(password):
return bcrypt.hashpw(password.encode('utf8'), bcrypt.gensalt())
def credentials_valid(username, password):
with session_scope() as s:
user = s.query(tabledef.User).filter(
tabledef.User.username.in_([username])).first()
if user:
return bcrypt.checkpw(password.encode('utf8'), user.password)
else:
return False
Run Code Online (Sandbox Code Playgroud)
当我尝试通过设置修复此错误时user.password= user.password.encode('utf8'),我收到“Invalid Salt”。
这段代码有什么问题?
更新:我通过用户的 Flask 输入存储密码:
import json
import sys
import os
import plotly
import pandas as pd
import numpy as np
import plotly.graph_objs as go
from …Run Code Online (Sandbox Code Playgroud)