目录:
- 不要对用户输入做出假设
- 程序应该对程序中发生的故障做出合理回应。例如,如果你对一个库函数的调用返回一个
- 在发生安全事件时,您一定会想知道是谁登录了您的系统 - 这是最有可能发生安全漏洞的组,并且在查找肇事者时最可疑。另外,你会想记录任何系统错误,包括大多数例外。
- 评论设计。坚持编码标准。
- 首先,不要将密码本身存储在数据库中。这被称为将它们存储在
- 当您的所有应用程序在一台计算机上运行时,您可以做出某些假设。一方面,一旦用户认证了自己,就不用担心他被转换成另一个人。与远程服务器进行通信的应用程序无法做出这样的假设 - 正在监听的黑客可以等待用户进行身份验证,然后劫持会话。
- 代码混淆
- 必要时使用安全加密
视频: 【黑客入门教学】09 WEP破解 wifite自动化破解WEP加密 2024
作为一名C ++程序员,您需要学习在C ++代码中应该做的事情,以避免编写容易受到黑客攻击的程序。还介绍了如果您的操作系统支持它们,则可以启用的功能,例如地址空间布局随机化(ASLR)和数据执行保护(DEP)。
不要对用户输入做出假设
程序员的隧道视觉在早期开发阶段是可以的。然而,在某些时候,程序员(或者更好的是一些与代码的开发无关的程序员)需要坐下来,忘记当前的问题。她需要问自己:“这个计划如何对非法输入作出反应? “
<! - 1 - >以下是检查输入的一些规则:
-
不要假设输入的长度。
-
不要接受比在固定长度缓冲区(或使用可变长度缓冲区)中有空间的更多输入。检查每个数值的范围以确保它是有意义的。
-
检查并过滤掉黑客可能用来注入代码的特殊字符。
-
-
对从远程服务返回的值执行所有相同的检查。黑客可能不在输入端,他可能在响应端。
轻松处理故障
程序应该对程序中发生的故障做出合理回应。例如,如果你对一个库函数的调用返回一个
nullptr,那么程序应该检测这个并且做一些合理的事情。 <! - 3 - > 这里的合理性
应该比较宽松地理解。该程序不需要嗅探,以确定为什么该函数没有返回一个合理的地址。可能是由于不合理的输入,这个要求太过分了。或者可能是构造函数检测到某种类型的非法输入。没关系。重点在于程序应尽可能地恢复其状态,并为下一个输入位设置,而不会崩溃或损坏现有数据结构(如堆)。 维护程序日志
创建并维护运行时日志,允许某人重建发生安全故障时发生的事件。 (实际上,这种情况在发生任何类型的故障时都是如此)。例如,每次有人登录或退出系统时,都可能需要记录日志。
在发生安全事件时,您一定会想知道是谁登录了您的系统 - 这是最有可能发生安全漏洞的组,并且在查找肇事者时最可疑。另外,你会想记录任何系统错误,包括大多数例外。
真实世界的生产程序包含大量调用,如下所示:
log(DEBUG,“用户%s输入合法的密码”,sUser);
这只是一个例子。每个程序都需要一些类型的日志功能。它是否真的被称为log()是不重要的。遵循一个良好的发展过程
每个程序都应遵循一个经过深思熟虑的正式开发过程。此过程至少应包括以下步骤:
收集并记录需求,包括安全需求。
评论设计。坚持编码标准。
进行单元测试。
-
根据原始要求进行正式的验收测试。此外,同行评审应在重点进行,以验证要求,设计,编码和测试程序的质量和符合公司标准。
-
实现良好的版本控制
-
版本控制是一件奇怪的事情。很自然地不用担心版本1. 1当你在枪口下把版本1.0送出去,进入等待用户伸出来的手。然而,版本控制是一个必须及早解决的重要课题,因为它必须嵌入到程序的初始设计中,而不是在后来才被使用。
-
版本控制的一个几乎微不足道的方面是知道用户正在使用哪个版本的程序。当用户打电话来说“当我点击它时会这样做”,那么服务台确实需要知道用户正在使用哪个版本的程序。他可能在描述当前版本中已经修复的版本中的问题。
-
安全认证用户
用户认证应该很简单:用户提供一个帐户名和一个密码,程序在表中查找帐户名并比较密码。如果密码匹配,则认证用户。但是谈到反黑客时,没有什么是那么简单的。
首先,不要将密码本身存储在数据库中。这被称为将它们存储在
中,并被认为是非常糟糕的形式。黑客手中的密码文件太容易了。相反,请保存密码的安全转换。
管理远程会话
当您的所有应用程序在一台计算机上运行时,您可以做出某些假设。一方面,一旦用户认证了自己,就不用担心他被转换成另一个人。与远程服务器进行通信的应用程序无法做出这样的假设 - 正在监听的黑客可以等待用户进行身份验证,然后劫持会话。
有安全意识的程序员可以做些什么来避免这种情况?您不想重复询问用户的密码,以确保连接没有被劫持。另一种解决方案是建立和管理一个
会话。 您可以通过让服务器在远程应用程序发送一个会话cookie后,一旦用户成功通过身份验证,就可以做到这一点。 混淆你的代码
代码混淆
是使可执行文件变得难以让黑客了解的行为。逻辑很简单。黑客越容易理解你的代码如何工作,黑客就越容易找出漏洞。你可以采取的最简单的步骤就是确保你只发布一个不包含调试符号信息的发布版本的程序。当你第一次创建项目文件时,一定要选择创建Debug和Release版本。
永远不要将包含符号信息的应用程序版本分发出去。 使用数字证书签名您的代码 代码签名通过生成可执行代码的安全散列,并将其与由有效证书颁发机构颁发的证书组合使用。这个过程是这样工作的:创建程序的公司必须首先向自己的证书颁发机构注册。一旦证书颁发机构确信我的公司是有效的软件实体,它就颁发证书。这是一个很长的数字,任何人都可以用来验证这个证书的持有人是着名的圣安东尼奥我的公司。
必要时使用安全加密
像任何良好的警告,这个警告有几个部分。首先,“必要时使用加密。 “这往往会让人想起通过互联网交流银行账户信息的想法,但是你应该比这更通用。无论是通过互联网还是通过一些较小的范围传输的数据通常都被称为 运动数据。 “运动数据”应该加密,除非对黑客没有用处。存储在磁盘上的数据被称为
静止时数据。
如果磁盘丢失,被盗或被复制,这个数据也应该被加密。如果笔记本电脑在机场的安全扫描仪上被盗,或者在某个地方的出租车上,那么企业通常会对公司笔记本电脑上的硬盘进行加密。诸如拇指驱动器之类的小型便携式存储设备特别容易丢失 - 这些设备上的数据应该被加密。