| 关键词: nbsp 攻击 应用程序 一个 检测 req 参数 路径 cookie 尝试 | ||||||||||||||||||||||||||||
黑客尝试攻破一个 Web 应用程序时,他们通常首先跟随每个链接来找到所有有效的路径,以筹划攻击。然后,他们尝试在输入字段中输入各种无效的值,查看应用程序是否存在任何已知的代码注入漏洞。在本教程中,您将学习如何检测这些攻击。检测到它们后,您可关闭来自攻击 IP 地址的访问,将它重定向到一个缓慢的或执行其他操作来变成难以被攻击的目标。 构建您的应用程序所需的准备工作全新的 developerWorks Premium 会员计划提供了强大的开发工具和资源,包括 500 篇通过 Safari Books Online 提供的顶级技术文章(50 多篇是专门针对安全性开发人员的),最重要开发人员活动的大幅折扣,最近的 O'Reilly 大会的视频回放,等等。立即注册。
“ 在本教程中,学习在您的 IBM Bluemix Node.js web 应用程序被扫描和攻击时如何检测出来。 ” 演示应用程序这个应用程序包含一个主页,其中包含一个登录表单。在表单的顶部,有一些按钮用于方便发出各种攻击。这些按钮下面是向 cookie 中放入危险值的按钮。在页面的底部,显示了在前 1 个小时内检测到的所有攻击的列表。请注意,该应用程序报告的时间为 UTC ,不是您当地的时间。 ![]() 点击查看大图 关闭 [x]
本文中演示的技术可检测 4 种类型的攻击:
可按如下方式发出任何这些攻击:
现在您已看到检测到的攻击,让我们看看代码,了解它是如何完成的。 检测访问无效页面的尝试第一步是检测访问各种无效页面的尝试。这将检测映射尝试,这些尝试通常是攻击的前奏。 Express 应用程序包 让此步骤变得非常容易。在 Express 中,可注册路径的处理函数,这些处理函数可完整地处理请求,或者执行部分处理(例如解析请求中的 cookie)并让请求流程继续运行。处理函数按声明它们的顺序处理。 要获得所有没有附加页面的请求,只需在末尾注册一个处理函数。如果已有一个返回 app.use("/", function(req, res) { res.send("Attempt to access " + req.path + " duly noted." + goBack); logBadPathAttack(req); }); 备注: 不是所有映射尝试都是恶意的。搜索引擎通常会映射网站,以便能够链接到它们的各个页面。可使用一个 robots.txt 文件来让合法的搜索引擎跳过您的网站。 攻击者不会尝试访问每个可能的路径,因为这种路径太多了。即使限制到仅包含字母和 8 个字符,也有 26^8≈2·10^11 种可能性。如果攻击者可在一秒内发送 10,000 个请求,仍需要超过 230 天才能检查完所有请求。 黑客会扫描他们合法地从应用程序获取的网页,寻找 URL 来找到他们可扫描的其他内容。为了促使他们扫描无效的页面,可放入合法用户绝不会看到的 HTML 代码链接。 例如,可使用以不可见的形式呈现链接的代码: <a href="should_be_invisible.html" style="color: white; background-color: white">Invisiblea> 如果使用 Angular 框架来执行客户端编程,可使用 <div ng-if="false"> <a href="index_false.html">Don't go herea>. div> <a href="index_1_is_2.html" ng-if="1==2"">Link to nowhere.a> <a href="index_complex_false.html" ng-if="no-such-var == 'hello'">Another useless link.a> 检测使用无效值来执行代码注入的尝试许多攻击都依赖于提供无效的值。例如,一种 SQL 注入 依靠使用 SQL 字符串终止符 这是检测这些攻击的方式:
注意此方法可能发生误报。例如,想象一个用户在描述字段中键入以下信息:“ 该文本与一种 SQL 批处理攻击的正则表达式匹配:一个撇号 (') 后跟许多字符,这些字符用分号 (;) 隔开。如果有必要,可以指定对于一些路径,不检查一些字段。req 对象包含该路径。要从检查中排除一些字段,可创建豁免字段的列表(涵盖所有 3 种类型:get 参数、post 参数和 cookie): // Fields that are not checked for the three field types var exemptGet = []; var exemptPost = ["/login:exempt"]; var exemptCookie = []; 修改检查这些字段的调用,以首先检查它们是否在适用的豁免列表中,如果是,则不检查它们: // Check all the body parameters for validity app.use("/", function(req, res, next) { var key; // Check all GET queries for (key in req.query) if (exemptGet.indexOf(req.path + ":" + key) === -1) // Don't check exempt fields checkInputAttacks('query parameter "' + key + '"', req.query[key], req, res); // Check all POST data for (key in req.body) if (exemptPost.indexOf(req.path + ":" + key) === -1) // Don't check exempt fields checkInputAttacks('post parameter "' + key + '"', req.body[key], req, res); // Check all cookies for (key in req.cookies) if (exemptCookie.indexOf(req.path + ":" + key) === -1) // Don't check exempt fields checkInputAttacks('cookie "' + key + '"', req.cookies[key], req, res); // If we ran res.send (which checkInputAttacks does when it detects an attack), // next() won't continue the processing anyway. next(); }); 测试攻击日志IBM Bluemix 包含一个 AppScan 服务,该服务在您的应用程序上运行各种攻击来识别它的漏洞。要确认攻击已记录,可以对您的应用程序运行它(参阅 “ 将 Bluemix AppScan 结果放入 Bluemix Track & Plan 中 ” 中的第 3 步)。在下表中,可以看到一些结果。甚至这个微型 Web 应用程序也检测到 AppScan 的 364 次不同的攻击尝试。
结束语现在您已知道如何检测攻击。检测到攻击后,您可 将它报告给 Track & Plan ,拦截来自该 IP 地址的访问,或者执行其他步骤来让攻击更困难。 | ||||||||||||||||||||||||||||
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|