0

安全代码实际上意味着什么?是不是你不能让那个代码做其他事情,它不应该做?

我的许多同行都说迁移到 c++ 或 java,因为它们更安全,因为 oops,但是当我问为什么时,他们只是说,“它只是......它是”。

一个例子将非常感激。而且我在 C 语言中相当菜鸟,在 C++ 中是超级菜鸟。(以防万一您想知道答案的复杂性会让我理解。)

4

3 回答 3

4

我认为您将模糊的“安全性”一词与封装混淆了。

http://en.wikipedia.org/wiki/Encapsulation_(面向对象编程)

“安全”,在保护敏感信息和防止攻击者控制您的系统等意义上,与面向对象编程无关(尽管面向对象编程当然可以用于实施此类安全措施)。

于 2013-09-12T08:19:22.413 回答
4

以下是使任何代码安全的参数:

1. 代码应该只做预期的事情。例如:"select * from tablename where id='" + txtUserInputId + "'" 在上面的查询中,它容易受到 SQL 注入的攻击。
2. 代码必须验证所有用户输入。
3. 授权应该被正确地执行而不是认证。
4. 用户输入数据应在处理前进行消毒。
5. 会话应妥善管理。它还影响代码的安全性,如何在 .Net 或 Java 或任何编程语言中管理会话。
6.内存必须是托管属性。一个进程不应该能够访问其他进程的内存。
7. 必须在任何数据库操作之前验证数据库约束。
8. 必须保护配置不受外界影响。例如:.Net 框架不允许用户查看 Web.config 文件。Web.config 文件可能包含敏感信息,例如数据库凭据。


注意:您可以说 C#.Net 在查询执行方面是安全的。因为它提供了自动为您处理用户输入数据的 CommandParameter。

于 2013-09-12T08:25:07.497 回答
3

这里所说的“安全”的中心点是OOP定义了一个契约(接口)并分离了实现。这称为封装。通常“安全”意味着别的东西,但我想这不是你的意思。

也就是说,考虑:

class A
{
private:
    int member_var;

public:
    A( int v )
    {
      if( i % 2 == 1 ) throw "odd!";
      member_var = v;
    }
};

这允许您确保 member_var 始终包含偶数。只有你的方法( 的方法A)被允许修改member_var,所以你可以保证你的类的任何用户都不能把奇数放进去。

与其他更动态的语言相比,OOP 语言可以帮助您在编译时检查所有规则。动态语言通常在运行时检查,这可能为时已晚。编译器的静态分析有助于在交付给客户之前防止错误。

这称为(类)不变量,以防您想通过谷歌搜索更多信息。

于 2013-09-12T08:16:44.200 回答