您如何解释一个外行或编程初学者,面向对象方法的大胆点 - 安全? [关闭]

Posted

技术标签:

【中文标题】您如何解释一个外行或编程初学者,面向对象方法的大胆点 - 安全? [关闭]【英文标题】:How would you explain a layman person or a beginner in programming, the bold point of object oriented approach - the SECURITY? [closed] 【发布时间】:2013-09-12 08:10:21 【问题描述】:

安全代码的真正含义是什么?是不是你不能让那个代码做其他不应该做的事情?

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

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

【问题讨论】:

我会说安全与它几乎没有关系。 我不认为oops更安全。你可以说java比c和cpp更安全,因为java运行在JVM上,而c cpp只是直接改变内存。但是java是安全的,不在乎哎呀 我认为最好的建议是停止听那些同行的意见,最好找一份更好的工作(或实习、上课、开源项目或其他什么),在那里你可以学习有用的信息,而不是废话…… 如果你切换到 C++,你会遇到很多糟糕的事情(原文如此),因为它被认为更“安全”。 :) 你有许多错误的假设,这使得回答这个问题几乎是不可能的。 【参考方案1】:

我认为您将模糊术语“安全性”与封装混淆了。

http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)

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

【讨论】:

【参考方案2】:

以下是使任何代码安全的参数: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。

【讨论】:

【参考方案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 语言可帮助您在编译时检查所有规则。动态语言通常在运行时检查,这可能为时已晚。编译器的静态分析有助于防止错误交付给客户之前。

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

【讨论】:

以上是关于您如何解释一个外行或编程初学者,面向对象方法的大胆点 - 安全? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Python学习笔记

Python自学指南-你好啊!Python

Python之面向对象

简洁易懂,初学者挑战学习Python编程30天

Swift中面向协议的编程

面向对象编程思想-解释器模式