小编Gli*_*ire的帖子

最佳实践:盐渍和胡椒密码?

我遇到了一个讨论,其中我了解到我一直在做的事情实际上并没有腌制密码而是给它们加油,而且我已经开始使用以下功能:

hash_function($salt.hash_function($pepper.$password)) [multiple iterations]
Run Code Online (Sandbox Code Playgroud)

忽略所选的哈希算法(我希望这是对盐和辣椒的讨论,而不是特定的算法,但我使用的是安全算法),这是一个安全的选择还是我应该做一些不同的事情?对于那些不熟悉这些条款的人:

  • 是通常存储与设计,使其不可能使用哈希表来破解密码的数据库中的字符串中的随机生成值.由于每个密码都有自己的盐,因此必须对它们进行单独的强制攻击才能破解它们; 但是,由于salt使用密码哈希存储在数据库中,因此数据库泄露意味着丢失两者.

  • 胡椒是从中旨在是秘密的数据库(在应用程序的源代码通常硬编码)分开存储站点范围静态值.它的使用是为了破坏数据库不会导致整个应用程序的密码表变得暴力破解.

有什么我缺少的,并且正在腌制和密封我的密码是保护用户安全的最佳选择吗?这样做有没有潜在的安全漏洞?

注意:为了讨论的目的,假设应用程序和数据库存储在不同的机器上,不共享密码等,因此违反数据库服务器并不会自动意味着破坏应用程序服务器.

security passwords hash salt password-hash

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

为什么不推荐使用PHP的mysql_函数?

在我不久前停止使用这些功能的时候,玩Devil's Advocate,但这个问题是真实的,可能对很多SO用户很重要.

我们都知道mysql_以错误的方式使用函数可能非常危险,它可能会使您的网站容易受到攻击等,但正确使用这些函数可以防止SQL注入,并且实际上比新的PDO函数一点.

考虑到这一切,为什么这些mysql_功能已被弃用?

php mysql mysqli pdo

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

找不到DBI.pm

我正在尝试启动此脚本:

#!/usr/bin/perl 

use DBI;

my $dbh = DBI->connect( 'dbi:Oracle:host=lonlin2;sid=TIMFX1AD;port=1524','xbsesdbo','xbsesdbo123' )  || die ( $DBI::errstr . "\n" );

my $query= "SELECT * FROM product_elements WHERE element_id = 1001";
my $queryHandler= $dbh->prepare($query);

my $result= $queryHandler->execute();


open(fileHandler,"> note.txt");

print fileHandler "Risultato query: $result\n";

my $e= $dbh->disconnect();
close(fileHandler);
Run Code Online (Sandbox Code Playgroud)

当我启动此脚本时,我收到此错误:

无法在@INC中找到DBI.pm(@INC包含:/opt/perl_32/lib/5.8.3/IA64.ARCHREV_0-thread-multi /opt/perl_32/lib/5.8.3/opt/perl_32/lib/site_perl/5.8.3/IA64.ARCHREV_0-thread-multi /opt/perl_32/lib/site_perl/5.8.3/opt/perl_32/lib/site_perl /opt/perl_32/lib/vendor_perl/5.8.3/IA64.ARCHREV_0- thread-multi /opt/perl_32/lib/vendor_perl/5.8.3/opt/perl_32/lib/vendor_perl.)at ./prova.pl第3行.

我已经安装好!! DBI.pm安装!!

perl perl-module

20
推荐指数
4
解决办法
5万
查看次数

IE10:'visibility:visible'在'visibility:hidden'元素的伪元素之前

我做了一个DIVwith visibility: hidden并附加了::before这个DIV 的伪元素visibility: visible.这在Firefox,Chrome和Safari中可以正常工作,但在Internet Explorer 10中,伪元素不会呈现.

请解释我是否完成了这个错误,或者这是否是Internet Explorer的问题.有没有解决方法(我们只能访问CSS,而不是源HTML)?

JSFiddle演示问题.

html css internet-explorer visibility pseudo-element

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

监视单个文件

我需要监视(使用watchdog)单个文件,而不是整个目录。

避免监视整个目录的最佳方法是什么?我想

class watchdog.events.PatternMatchingEventHandler(patterns=None, ignore_patterns=None, ignore_directories=False, case_sensitive=False)[source]
Run Code Online (Sandbox Code Playgroud)

可能会有所帮助,但是如何为我的文件(C:/dir1/dir2/file.txt)定义适当的模式?

python watchdog

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

适用于 Windows 的 GIT。所有文件的图标上都有一个问号

我最近在不知道自己在做什么的情况下将Git安装到了我的Windows 7笔记本电脑上。我现在遇到的问题是我 PC 上的所有文件上都有问号图标,就好像它们需要提交到存储库一样。

我怎样才能撤消我所做的一切,以便文件上不再有问号图标?

windows git repository

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

我应该使用JOIN函数还是在循环结构中运行多个查询?

我有这2个mysql表:TableA和TableB

TableA
*ColumnAId
*ColumnA1
*ColumnA2
TableB
*ColumnBId
*ColumnAId
*ColumnB1
*ColumnB2

在PHP中,我想拥有这种多维数组格式

$array = array(
    array(
        'ColumnAId' => value,
        'ColumnA1' => value,
        'ColumnA2' => value,
        'TableB' => array(
            array(
                'ColumnBId' => value,
                'ColumnAId' => value,
                'ColumnB1' => value,
                'ColumnB2' => value
            )
        )
    )
);
Run Code Online (Sandbox Code Playgroud)

这样我就可以用这种方式循环它

foreach($array as $i => $TableA) {
    echo 'ColumnAId' . $TableA['ColumnAId'];
    echo 'ColumnA1' . $TableA['ColumnA1'];
    echo 'ColumnA2' . $TableA['ColumnA2'];
    echo 'TableB\'s';
    foreach($value['TableB'] as $j => $TableB) {
        echo $TableB['...']...
        echo $TableB['...']...
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,查询MySQL数据库的最佳方法或正确方法是什么,以便我可以实现这一目标?

解决方案1 ---我正在使用的那个 …

php mysql optimization

5
推荐指数
2
解决办法
1330
查看次数

如何从没有数字ID的MySQL数据库表中获取随机行?

我有一个分散的MySQL数据库表分布在许多服务器上,并希望有一个函数来获取随机记录.

我看待它的方式,最好的方法是:

  1. 在(Perl)应用程序层中选择随机分片.
  2. 从该分片上的表中选择一个随机行.

这个问题将集中在解决方案的第2部分.

我的表没有数字ID,我们决定使用GUID以避免必须维护票务服务的开销.我们将GUID与分片标识符结合使用,以确保它们是唯一的.

表是这样的:

guid                                        name      details
003-b0470602-a64b-11da-8632-93ebf1c0e05a    Aura      Some details
Run Code Online (Sandbox Code Playgroud)

杰克建议我到目前为止提出的最佳答案是:

  1. 计算数据库中的记录数.
  2. 获取介于1和步骤1的结果之间的随机数.
  3. SELECT * FROM table LIMIT {result from step 2}
  4. 从此(可能非常大)的结果集中获取最后的结果.

我担心这涉及的处理可能会非常大(虽然肯定比这更好ORDER BY RAND() LIMIT 1,并且想知道是否有人有更好的解决方案使用非数字标识符.

mysql database random perl

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

使用会话和Cookie安全登录

我目前使用会话将用户登录到我的网站.现在,我想在混合中添加cookie,以便人们可以在几天后访问该网站,而无需再次登录.

我不想将密码存储在cookie中或加密任何东西 - 所以我的解决方案是将用户名存储在cookie中,并使用一种登录哈希(特定于每个用户的每次登录)创建另一个cookie.然后,在每个页面的顶部,检查cookie和登录会话.如果cookie存在但会话不存在,请找到用户名并将用户登录.

因此,这会在他们成功登录后发生($row['username']是他们输入的用户名):

$_SESSION['username']=$row[username];
$_SESSION['user_id']=$row['id'];
$loginhash = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 32);
$number_of_days = 14;
$date_of_expiry = time() + 60 * 60 * 24 * $number_of_days ;
setcookie( "userlogin", $row['username'], $date_of_expiry, "/" ) ;
setcookie( "loginhash", $loginhash, $date_of_expiry, "/" ) ;

$today=date("Y-m-d");

mysql_query("update members set last_login='$today',loginhash='$loginhash' where id='$row[id]' ") or die(mysql_error());
Run Code Online (Sandbox Code Playgroud)

然后在每个页面的顶部,执行以下操作:

if($_COOKIE['userlogin'] && !isset($_SESSION[user_id])){
    $username=mysql_real_escape_string($_COOKIE['userlogin']);
    $loginhash=mysql_real_escape_string($_COOKIE['loginhash']);
    $result=mysql_query("select * from members where (username='$username' || email='$username') && loginhash='$loginhash' ") or die (mysql_error());
    $row=mysql_fetch_array($result);
    $_SESSION['username']=$row[username];
    $_SESSION['user_id']=$row['id'];
}
Run Code Online (Sandbox Code Playgroud)

然后,当然,当用户手动注销时取消设置cookie.

我的问题是,这是否安全(除了其他人使用用户计算机的危险)?为每次登录生成随机哈希,因此有人不能仅使用某人的用户名创建cookie并以该人身份登录.

登录脚本使用HTTPS,因此该方面没有危险.

php security cookies session

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

Perl 从不同包访问包常量

我是 Perl 新手,现在正在学习 Perl 中的 OOP。

有没有一种方法不需要任何额外的库(禁止使用任何额外的库)来访问另一个包中一个包中的变量?

package Class;

my $CONSTANT = 'foo'; # this doesn't work, neither our $CONSTANT ..

# ...
# class methodes
# ...

package main;

print Class::$CONSTANT ."\n";
Run Code Online (Sandbox Code Playgroud)

perl

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