当向第三方提供库时,C++include文件是否属于安全漏洞

Are C++ include files a security breach when supplying a library to 3rd parties?

本文关键字:文件 C++include 是否 属于 安全漏洞 第三方      更新时间:2023-10-16

我不是C++专家,我实际上更喜欢C,我也不处于技术的前沿,但我偶尔会以库的形式向第三方提供一些科学软件。我知道依靠汇编并不是保护我专有利益的好方法,但我一直信任我的"客户"。

然而,我突然想到,"恶意"第三方可能会通过编辑我的包含文件来滥用我的软件;将private:类成员更改为public:是一个特别令人担忧的问题。

我的担心是没有根据的吗?如果不是,有没有解决方案,也许有一种预编译头的方法?

附言:我知道皮条客这个成语,但我的一些同事不喜欢动态记忆。此外,c++11还没有达到这些部分。

我不知道你为什么认为这是一个问题。如果人们想扰乱你的代码(并可能以这种方式破坏他们自己的代码),为什么不呢?如果你想保护库中使用的类似算法的东西不被反向调用,我会理解的,但简单地访问private变量并不是你应该害怕的事情。

毕竟,private并没有提供任何真正的保护,你总是可以做这样的把戏

class My
{
public:
    int i()
    {
        return _i;
    }
private:
    int _i = 5;
};
struct Omg
{
public:
    int _i;
};
int main()
{
    My m;
    Omg * o = (Omg*)(&m);
    o->_i = 10;
    std::cout << m.i();
    return 0;
}

至于皮条,它在Qt中使用,如果你觉得方便和合适,你也可以使用它,这里有更多信息。

很多时候,交付给客户的软件由客户端代码和专有代码组成。客户端代码是允许客户或客户端读取甚至修改的软件的一部分。另一方面,专有代码是软件作者想要保护并禁止包括客户在内的其他人使用的代码。

为了保护专有代码,您可以将其放入单独的文件中,并将其编译为DLL。但这并不安全,因为黑客可以在该DLL上使用反编译器并访问源代码。

一个更可靠的方法是使用加密工具,但我还没有使用任何加密工具来了解如何将加密文件编译或转换为库文件。

最后,客户端代码将链接到并调用专有代码。因此,是否进行保护是一个早期决定,它将深刻影响软件的整个设计。

您可以使用纯接口或"pimpl习语"来减少SDK消费者对类内部细节的访问。最终,它们拥有编译后的代码,可以对其进行反汇编并执行任何操作,但如果您希望您的分布式包含文件不太容易被SDK客户端滥用,那么具体类上的纯接口或pimpl习惯用法可以从发布的头文件中隐藏这些详细信息。

相关文章: