充分利用攻击模式
程序员可以使用攻击模式来确认相关攻击所针对的特定编码缺陷,并确保这些缺陷不会出现在其代码中。首先,程序员在考虑软件的架构和执行环境后,需要决定哪些攻击模式可行,哪些技术可用于实施攻击该软件。例如,对于一个运行在本地Linux上的C或C++程序而言,缓冲区溢出攻击模式就具备相关性,而对于一个运行在.NET平台上的C#程序而言,缓冲区溢出攻击模式就与之无关。根据需要避免的攻击模式,程序员应当决定哪些构造不应当出现在其代码中。
下面的例子展示了程序员如何利用攻击模式:
攻击模式:简单的脚本注入
用于:避免跨站脚本漏洞
此模式有可能针对的代码部分:即将输出的数据发送到一个来自不可信源的用户的代码部分。
如何保护代码避免遭受攻击模式:如果没有提前采取相应的反制措施(即,根据架构师的决策,在服务器和客户端之间的联结处,包括一个自包含的输入验证器/输出过滤器),就应当实施类似于下面的反制措施:
1、将潜在的危险字符转换成其HTML的对等物,以防止客户端显示有可能包含非法数据或臆造数据的不可信输出,如由攻击者插入的<script>标签。这种转换的例子包括“<”变成“<”,或者“>”变成“>”;自动执行这种转换的第三方Java库;JavaScript的escape()函数也可以执行类似的转换。注意,需要谨慎管理这种转换,以避免由更长的字符串替换单个字符成造成的潜在的缓冲区溢出漏洞。
2、实施一种输入验证过滤器,使其可以根据允许输入的字符白名单对输入进行过滤。
实施加密和哈希
程序员需要加密敏感数据(例如,密码和会话ID),尤其是在不受信任的渠道(如互联网)更要如此。无法保护敏感数据可能会导致攻击(例如,会话劫持和跨站脚本攻击),导致对应用程序和数据的未授权访问。
加密功能在许多软件中是一种重要的工具,这会确保保密性和完整性。有许多程序可以创建自己的加密功能,如果程序被破解,就会使软件不安全。对程序员来说,没有任何理由和借口允许加密功能发生故障,因为所有的主流语言都有其安全的、经审核的加密函数库。使用这些库比用户自己开发这些功能要简单得多。下面是关于算法的一些建议:
对Web应用程序使用传输层安全(TLS);
不使用MD5和安全哈希算法(SHA-1),而应当使用SHA-256/512 and SHA-3哈希;
不要使用DES(数据加密标准),而应使用AES(高级加密标准)或Triple DES;
程序员所开发的程序还应当允许在算法被破解时,能够轻易地切换到另一种哈希和加密算法。
在部署之前禁用调试工具
核心转储仅能够在测试期间才可作为一种诊断工具使用。应当在部署应用程序之前对应用程序进行配置,在应用程序的实际使用期间如果发生故障,能够关闭其生成核心转储的能力。在程序发生故障时,不能使用核心转储功能,而应该在程序退出之前,由“例外事件处理程序”来将适当的数据发送到安全日志中。此外,如果有可能,应当将核心文件的大小配置为零(0)(例如,在UNIX中使用setrlimit或ulimit);这样做可以进一步防止生成核心文件。
显然,上述所谓的九大最佳方法,并非程序员编制健壮软件的灵丹妙药,但是只要其遵循这些方法,就可以极大减少程序遭受攻击或数据泄露的可能性。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
软件开发:安全编码的九个最佳方法(二)
软件应当只保留最少的所需状态的信息,并且应当经常清除写到高速缓存中的数据和磁盘临时文件中的数据。
-
软件开发:安全编码的九个最佳方法(一)
开发团队的所有成员应当清楚常见的编程错误及原因和减少错误的方法,以及这些内容对当前软件项目的适用性。
-
安全编码有章可循(一)
在做好安全软件开发的准备之后,开发团队还需要清楚安全编码的原则。这是开发任何健壮、安全软件的重要基础。
-
易被忽视的五大安全编码原则
如今,很多培训软件开发人员的机构并不培训如何安全地编码。解决软件安全问题的最佳策略就在于程序分析、开发、测试阶段对安全性的考虑。