小编Avi*_*viD的帖子

如何在PHP中保护数据库密码?

当PHP应用程序建立数据库连接时,它当然通常需要传递登录名和密码.如果我正在为我的应用程序使用单个最小权限登录,那么PHP需要知道某处的登录名和密码.保护密码的最佳方法是什么?看起来只是在PHP代码中编写它并不是一个好主意.

php database security

395
推荐指数
15
解决办法
20万
查看次数

用于密码哈希的非随机盐

更新:我最近从这个问题中了解到,在下面的整个讨论中,我(我确信其他人也这样做)有点令人困惑:我一直称之为彩虹表,实际上称为哈希表.彩虹桌是更复杂的生物,实际上是Hellman Hash Chains的变种.虽然我认为答案仍然是相同的(因为它不归结为密码分析),但有些讨论可能有点偏差.
问题是:" 什么是彩虹表,它们是如何使用的? "


通常,我总是建议使用加密强随机值作为salt,与哈希函数(例如密码)一起使用,例如防止彩虹表攻击.

但实际上盐是随机的加密必需吗?在这方面,任何唯一值(每个用户唯一,例如userId)是否足够?实际上,它会阻止使用单个Rainbow Table来破解系统中的所有(或大多数)密码......
但是缺少熵真的会削弱散列函数的加密强度吗?


注意,我不是在问为什么要使用salt,如何保护它(它不需要),使用单个常量哈希(不要),或者使用什么样的哈希函数.
无论盐是否需要熵.


感谢所有答案到目前为止,但我想集中讨论我(有点)不太熟悉的领域.主要是对密码分析的影响 - 如果有人从密码数学PoV获得一些输入,我会非常感激.
此外,如果还有其他未被考虑的向量,那也是很好的输入(参见@Dave Sherohman指向多个系统).
除此之外,如果您有任何理论,想法或最佳实践 - 请使用证据,攻击情景或经验证据来支持这一点.或者甚至是可接受的权衡的有效考虑因素......我对该主题的最佳实践(资本B资本P)很熟悉,我想证明这实际上提供了什么价值.


编辑:这里有一些非常好的答案,但我认为正如@Dave所说,它归结为Rainbow Tables的常见用户名......以及可能不太常见的名称.但是,如果我的用户名是全局唯一的呢?不一定是我的系统唯一,但每个用户 - 例如电子邮件地址.
没有动力为单个用户构建RT(正如@Dave强调的那样,盐不会保密),这仍然会阻止群集.唯一的问题是我可能在不同的网站上有相同的电子邮件和密码 - 但盐无论如何都不会阻止它.
因此,它回归到密码分析 - 是否需要熵?(我目前的想法是从密码分析的角度来看没有必要,但这是出于其他实际原因.)

security authentication hash cryptography password-protection

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

在JSON.NET中序列化null

通过JSON.NET序列化任意数据时,任何null属性都将写入JSON

"propertyName":null

当然,这是正确的.

但是我要求自动将所有空值转换为默认的空值,例如null strings应该变为String.Emptynull,int?s应该变为0null,bool?s应该是false,等等.

NullValueHandling没有帮助,因为我不想Ignore空,但我也不想要Include它们(嗯,新功能?).

所以我转向实施自定义JsonConverter.
虽然实现本身是轻而易举的,但不幸的是,这仍然CanConvert()无法工作 - 永远不会调用具有null值的属性,因此WriteJson()也不会调用它.显然空值会自动序列化null,而不需要自定义管道.

例如,以下是空字符串的自定义转换器示例:

public class StringConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return typeof(string).IsAssignableFrom(objectType);
    }

    ...
    public override void WriteJson(JsonWriter writer, 
                object value, 
                JsonSerializer serializer)
    {
        string strValue = value as string;

        if (strValue == null)
        {
            writer.WriteValue(String.Empty);
        }
        else
        {
            writer.WriteValue(strValue);
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

.net c# serialization json.net

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

从https页面转到http页面时是否发送了HTTP标头Referer?

经过几次测试后,我开始得出这样的结论:浏览器在从https网页点击http页面时不会发送Referer HTTP标头.

这有什么安全理由?是在标准的某个地方定义的吗?

security https http http-headers

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

"填充无效,无法删除"使用AesManaged

我正在尝试使用AesManaged进行简单的加密/解密,但在尝试关闭解密流时我一直遇到异常.这里的字符串被正确加密和解​​密,然后在Console.WriteLine输出正确的字符串后,我得到CryptographicException"Padding无效且无法删除".

有任何想法吗?

MemoryStream ms = new MemoryStream();
byte[] rawPlaintext = Encoding.Unicode.GetBytes("This is annoying!");

using (Aes aes = new AesManaged())
{
  aes.Padding = PaddingMode.PKCS7;
  aes.Key = new byte[128/8];
  aes.IV = new byte[128/8];

  using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(),
                                            CryptoStreamMode.Write))
  {
    cs.Write(rawPlaintext, 0, rawPlaintext.Length);
    cs.FlushFinalBlock();
  }

  ms = new MemoryStream(ms.GetBuffer());
  using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(),
                                            CryptoStreamMode.Read))
  {
    byte[] rawData = new byte[rawPlaintext.Length];
    int len = cs.Read(rawData, 0, rawPlaintext.Length);
    string s = Encoding.Unicode.GetString(rawData);
    Console.WriteLine(s);
  }
}
Run Code Online (Sandbox Code Playgroud)

.net c# encryption

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

当机器人攻击!

除了CAPTCHA之外,有哪些流行的垃圾邮件预防方法?

security captcha bots spam-prevention

26
推荐指数
7
解决办法
3902
查看次数

REST和CSRF(跨站点请求伪造)

跨站点请求伪造是否可以对抗无状态RESTful服务?

我不是在谈论伪REST,服务器会记住你是通过cookie登录的.我说的是没有cookie的纯无应用程序状态的服务器REST.

我正在使用SSL和基本身份验证.对于每个请求,该Authorization标头必须在那里.尽管在SSL级别存在某种会话,但JSP意义上没有"会话".

因此,我们假设我正在查看发出Ajax请求的合法网页,并且我会以某种方式转到同一选项卡或不同选项卡中的不同页面,并且该页面发出相同的Ajax请求.(我假设合法网页上没有恶意代码;这完全是另一回事,在这种情况下一切皆有可能.)

当第二个页面发出Ajax请求时,浏览器是否会放置相同的Authorization标头?也就是说,浏览器会说"哦,你想再去那里?嘿,我碰巧还有钥匙!"?

此外,恶意脚本无法执行xhr请求,然后在回调中从ioargs获取请求,获取Authorization标头并取消Base64的名称和密码?

security rest csrf

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

过分关注测试好处总体上是一件坏事吗?

我的意思是,有时建筑师希望以牺牲其他重要力量为代价来简化和提高可测试性.

例如,我正在审查一个非常复杂的应用程序,通过广泛使用过度支持测试的设计模式来实现,例如IoC,DI,AOP等......
现在,我通常喜欢这些东西,但这个系统应该是更简单 - 虽然不仅仅是数据库上CRUD的简单Web前端,但它仍然没有那么复杂(甚至考虑到一些内部工作流程,流程等).另一方面,只是审查代码成为heinie的主要痛苦,几乎不可读(即使它写得很好),编码一定是痛苦的.

实施的复杂性明显违反KISS(原则,而不是乐队)......"唯一"的好处是提高可测试性,使用测试框架和模拟和...

现在,在TDD粉丝跳过我之前,我并没有贬低可测试性的重要性,但我在质疑考虑这种特定力量(对所有其他力量)的至高无上的地位.
还是我错过了什么?


我想补充一点 - 在我看来,所有关于"可测试性"的讨论都是关于单元测试的,这与整个系统测试不同,并且当各个单元集成在一起时可能导致错过测试.至少,这似乎是用于测试的IoC/DI的重点......
另外,我指出这个系统(以及我见过的其他系统)每个接口只有一个具体对象,而IoC/DI仅用于 - 您猜对了 - 用测试模型替换具体对象仅用于测试.


我觉得有必要在IoC上添加维基百科的这句话:

虽然程序编程中的危险是以意大利面条代码结束,但使用控制反转时的危险以通心粉代码结束

是的,这完全表达了我的感受:D

testing tdd design-patterns

11
推荐指数
3
解决办法
917
查看次数

攻击WPF应用程序

WPF应用程序特有的攻击或安全漏洞是什么?
为了澄清,我不是问如何在WPF应用程序上进行SQL注入,或者我应该使用什么样的加密,或者......我也没有具体询问框架中的缺陷,或者WPF本身的缺陷,而是缺陷可能表现为基于不正确的实施.
非常具体地说,我对在WPF中实现的客户端应用程序特有的新攻击或新向量感兴趣.不是特别是XBAP ...... ClickOnce相关问题也很棒.


WPF Skin Skinning Security Concerns将是一个很好的例子,虽然与我的特定需求并不特别相关(但仍然是一个有效的答案).

.net security wpf

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

DotNetNuke漏洞

有人熟悉当前版本的DotNetNuke中的特定安全问题吗?
(我已经检查过他们的网站,安全焦点等...)

我重新打开了这个问题,因为我的客户使用DotNetNuke开发了他们的系统 - 因此这是一个编程问题.我只需要了解有关此平台的一些问题.

security dotnetnuke

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