none
hard code在代码中的db connect密码,用notepad查看生成的.exe,竟然明文一览无余! RRS feed

  • 问题

  • 大家可以花三分钟时间,简单实验一下: 无论在Visual Studio .NET 2005或Visual Studio .NET 2008里,新建一个Project,我选的是C#语言. 类似如下定义class member变量,一个有const修饰符,另一个没有,并在一个method中引用。 public partial class Form1 : Form { private const string strConnectDB = @"Data Source=\My Documents\test1.sdf;password='123'"; private string strStrange = @"strange? source code was exposed in .exe!"; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string strTemp1,strTemp2,strTemp3; strTemp1 = strConnectDB; strTemp2 = "select id,name from MyTable where id = 1999"; strTemp3 = strStrange; } Build Project,然后用记事本打开这个生成的 .exe;在文件后端,你看到了什么?! Hard code的这两个member variables的值,以及local variable - strTemp2的值, 竟然在"二进制"结果文件里,曝漏无疑,只是变成全角而已!! 在有些简单的DB App里,某些变量(如connection string),我们希望直接hard code在code中。 但是,不希望end user,用notepad就能看到变量的值! 尤其如 connect string中的db file name & password! 怎么办?谢谢!
    2010年8月11日 8:53

答案

全部回复

  • 你好

    你的VISUAL STUDIO 有沒有dotfuscator, 有的話可嘗試用他看看能不能解決這個問題

    詳情可以參考以下URL

    http://msdn.microsoft.com/zh-cn/library/ms227240%28VS.80%29.aspx

    Please correct me if my concept is wrong


    Chi
    • 已标记为答案 David Carl 2010年8月12日 8:25
    2010年8月11日 12:22
    版主
  • 首先希望字符串不以原样存在于可执行文件中本身就是个很奇怪的要求——以原样保存的数据是处理起来最快的,任何开发工具都会这样做;不要大惊小怪地说什么“source code was exposed in .exe!”,字符串作为数据并不属于源代码的范畴。

    如果不希望别人可以轻易读出来字符串或者其它数据,可以考虑用Dotfuscator或者自己编写转换代码混淆视听。

    但是你需要想清楚,你想防范的是什么样的人——如果对方是具有丰富经验的人,这种小把戏根本没法藏住你写在程序中的密码。

    话说回来,你到底是出于什么样的原因希望把密码隐藏起来呢?用一个通用的数据格式在用户的电脑上保存数据,又不希望用户知道或者修改里面的内容,这个要求也是够奇怪的。如果你觉得不让用户查看/修改数据真的那么重要的话,你应该选择个偏门点的数据格式。像这样的事情就不该问别人选什么了,要是别人会告诉你,那就肯定不够偏门。


    Most questions i'm interested in might have two or more possible answers i know or i don't know. So please read question carefully before you try to answer, and explan your question detailedly before asking for help. 很多看起来简单的问题都存在多种可能性,如果您不能详细的解释,别人就不能正确判断出您所遭遇的实际状况,因而不能给出最适合的解决办法。在您没有给出详细信息的情况下,施助者只有张贴大量有可能有关的解决办法。而您可能没有耐心阅读所有这些东西,在这种情况下您就客观地形成了对施助者的伤害——除非“施助者”并没有用心去尝试帮助您。 同样地,当您尝试解答一个看起来“好像遇到过”的问题的时候,您也需要详细地阅读和理解这个问题。如果您不了解问题的细节,您可能会给出不相关的或者无助于解决当前问题的解答。
    2010年8月12日 4:13
  • 谢谢 ChiYau 的答复!!!

    2010年8月12日 8:26