繁体   English   中英

在方法中将密码存储为本地常量的安全隐患?

[英]Security implication of storing a password as a local constant in a method?

我想就最常见的安全性反模式进行自我教育。

假设地说,以以下方式存储密码有哪些安全隐患:

interface

type
  TFoo = class
   procedure DoSomething;
  end;

Implementation

procedure TFoo.DoSomething;
 const
   Password = 'Something';
begin 

end;

我知道正确的方法是使用哈希算法对密码进行哈希处理并将该值保存在外部文件中,但是我对示例中的密码如何暴露给恶意的第三方非常感兴趣。

通过检查可执行文件中的数据可以看到密码。 例如,使用十六进制编辑器甚至记事本。

我想教育自己...

除了egur的正确答案之外 ,还可以回答未提出的问题,即任何密码存储在源代码中的解决方案是否可以:

如前所述,常量String实际上出现在可执行文件中。

选择1:

const
  PW0 = 'pas';
  PW1 = 'swo';
  PW2 = 'rd';
var
  PassWord: String;
...
initialization
  PassWord := PW0 + PW1 + PW2;

结果:可执行文件中的“密码”。

选择2:

const
  PW2 = 'rd';
  PW1 = 'swo';
  PW0 = 'pas';
var
  PassWord: String;
...
initialization
  PassWord := PW0 + PW1 + PW2;

结果:可执行文件中的“密码”。

选择3:

var
  PW2: String = 'rd';
  PW1: String = 'swo';
  PW0: String = 'pas';
  PassWord: String;

initialization
  PassWord := PW0 + PW1 + PW2;

结果:可执行文件中的“ rd”,“ swo”和“ pas”。

再多尝试一下。 在记事本中打开可执行文件,然后自己查看。

此外,不用说,上述做法不是建议,而只是对该问题的补充价值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM