首页 文章

我们可以在互联网上学习c / c中的安全编程[关闭]

提问于
浏览
8

我开始学习有关安全性和安全编程的所有知识 .

我一直听说过缓冲区溢出漏洞等问题 .

但我还不知道这些漏洞是如何被利用的 . 我们如何安全地编程以确保我们的代码是健壮的 .

当我说这一切时,我感兴趣的编程语言是c和c .

  • 我正在寻找互联网上的免费教程和资源,在那里我可以学习安全编程的每一个内容 .

  • 也欢迎平台特定提示 . 例如,我知道在Windows编程中我们可以使用像“memmove_s”这样的函数来获得安全代码 . 但Linux / Unix中的等价物是什么?或者它是一样的吗?

  • c / c程序员是否应该担心特制的格式化蜇(比如非常流行的旧PHP格式的字符串外观)?

这里有很多问题,但一般的想法是我的意思是学习安全编程 .

感谢您的帮助 .

4 回答

  • 6

    我会抛出一些并制作这个社区维基:

    • 永远不会使用 gets .

    • 不要假设字符串是空终止的,除非你真的知道它是 .

    • 永远不要只声明一个大的固定大小的缓冲区,只是假设它对你正在做的事情“足够大” .

  • 4
  • 3
    • 断言,断言,断言 . 如果甚至存在某些可能不正确的理论可能性,请继续并断言它是正确的 . 如果某些事情与您的预期不符,您希望您的程序立即死亡并且非常壮观 . 确保您的断言不会被优化掉 .

    • 对缓冲区要非常小心 . 有一些函数(例如gets)写入缓冲区而不知道它有多大 . 不要使用这些功能 . 始终在您需要的位置检查缓冲区大小,而不是依赖于预先计算的值 .

    • 始终检查返回代码 . 如果你不能对错误做任何有意义的事情(例如malloc),那么断言成功,或者更好,编写一个断言成功的包装函数,这样它就不会返回错误值而永远不会使用原始函数 . 要超偏执,如果隐式忽略返回值,请让编译器发出警告 .

    • 将进入程序的任何数据视为可能的恶意攻击,因为它是 . 这包括配置文件以及用户输入 .

    • “过早优化是万恶之源” . 首先要做对 . 甚至不要考虑让它更快,除非a)你绝对必须和b)你已经分析了代码并准确知道你的瓶颈是什么 .

    • 让其他人检查您的代码 .

    这些只是少数几个起点 . 编写安全代码很难 .

  • 2

    安全编程包含减少代码维护者自己滥用的可能性的实践 .

    这是我的两分钱 - 尽可能避免使用指针 . 在我看来,只有当NULL值具有特殊含义时才应使用指针 . 这个原则延续到几个编码习语

    • 使用STL向量而不是数组

    • 将基本类型传递给函数时,使用pass-by-reference / pass-by-value

    • 将用户定义的类型传递给函数时使用pass-by-const-reference . 这与传递指针一样有效 .

    最重要的是,如果涉及到指针,很有可能会被最终继承代码的人滥用 .

相关问题