【问题标题】:How to not hardcode a String in a software?如何不在软件中对字符串进行硬编码?
【发布时间】:2016-11-28 18:44:50
【问题描述】:

我想知道如何不对字符串进行硬编码,例如某些软件或远程连接软件中的 IP。

我听说一位网络安全专家在他的软件中发现了一个黑客的 IP,并以此跟踪了他。

那么,我怎样才能避免将我的 IP 硬编码到软件中,如果我硬编码它,人们如何找到我的 IP?

【问题讨论】:

  • 这个问题现在太宽泛了,你能试着缩小范围吗?
  • 在命令行传递字符串,或者让用户输入,或者从配置文件中读取...
  • 首先,您想做什么?不对字符串进行硬编码是什么意思?如果您担心有人跟踪您的 ip,为什么不使用代理服务器呢?为什么需要首先隐藏您的IP?您的程序是否需要从您的 ip 下载内容或向该 ip 报告某些内容?没有详细的答案,只有一般的答案。哦,如果你的程序连接到一个 IP,我们不需要读取源代码,我们可以查看我们的计算机连接到什么,并在需要时跟踪该 IP。
  • 或者我什至在你想要的正确轨道上。你想让别人不知道你程序中的“特殊str”吗?还是公式的值?
  • 我没有做任何程序,我只是想知道这个。主要问题是如何在程序中隐藏字符串或变量。 ip是一个具体的例子。当然,您可以使用代理、vpn 等,但这不是问题

标签: python string hardcoded


【解决方案1】:

有几种方法可以隐藏硬编码字符串。最简单的方法之一是将这些位与另一个字符串或重复的常量进行异或。因此,您可以有两个硬编码的短数组,当它们一起异或时,会产生您想要隐藏的字符串。

【讨论】:

  • 谢谢!这真的可以实现。
【解决方案2】:

您可以执行以下任何操作:1) 从文件中读取字符串,2) 从数据库中读取字符串,3) 将字符串作为命令行参数传递

【讨论】:

  • 我认为这不是 OP 想要的。 OP 想知道如何在节目中掩盖他的踪迹。 IE 如果他给你程序运行,他不希望他的 IP 泄露...
  • 但是,如果您从任何数据库中读取,它会在您的程序中显示数据库凭据,(并且可以读取?),如果您从文件中读取字符串,则需要例如加密文件,并且要解密它,您需要在程序中使用解密密钥,(并且可以读取?)
  • MooingRawr,不,我不知道。我想隐藏一个字符串,或者一般来说,一个程序不被读取,特别是对于 IP 和 RSA 私钥。
【解决方案3】:

一种选择是使用非对称加密,您可以使用它从服务器请求私有字符串(请参阅 SSL/TLS)。 如果您想在本地执行此操作,您应该写入/读取文件(操作系统应该通过用户访问来处理授权)

【讨论】:

  • 谢谢。当他进入内存并被软件使用时,SSL / TLS从服务器请求的密钥或任何字符串是否可以被拦截?
  • 不,如果正确实施 SSL 首先确认服务器就是他所说的那样(使用非对称加密,通过证书颁发机构),那么您的程序和服务器使用对称密钥交换加密相同的非对称加密(这意味着只有服务器的所有者才能解密信息,也就是对称密钥)。此后的所有通信都使用对称密钥来加密数据,因此无法拦截它(只要加密算法是最新的)。
  • 好吧,密钥在网络中是不能被截取的,比如MIM攻击,但是说到内存,就好像我们定义了一个变量ip = "myip" ?
  • 取决于您正在编程的语言,如果它是编译语言(如 C 或 Java),则变量只会在内存中,由指针引用,因此几乎不可能读取它。在解释型语言(如 JavaScript)中,可以读取变量,但如果变量不在可访问范围内并且您的代码不是人类可读的(例如,如果您使用 Uglify),这应该非常困难。
【解决方案4】:

如果你想隐藏它,加密它,你会在 github 上看到很多人不小心将他们的 aws 密钥发布到 github,因为他们没有将其用作“秘密”。 始终加密重要数据,永远不要使用像 ip 这样的硬编码值,因为这很容易更改,某种 dns 解析器可以帮助您保持正常运行。 在您提到的这种特定情况下,使用 DNS 指向代理将有助于掩盖端点 ip。

【讨论】:

    猜你喜欢
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 2011-06-24
    • 2011-10-06
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多