首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >声明“这是数据,而不是代码”以防止注入攻击。这个词是什么意思?

声明“这是数据,而不是代码”以防止注入攻击。这个词是什么意思?
EN

Security用户
提问于 2019-01-07 03:38:09
回答 4查看 480关注 0票数 10

有多种方法确保接收系统理解“这是数据,而不是代码”,这样它就不会试图执行或解释数据。举几个例子:

  • 准备语句,以避免SQL注入攻击。
  • 转义JavaScript字符串,以避免XSS攻击
  • 编码HTML实体,以避免HTML注入

是否有一个词或短语涵盖所有这些情况?

(我不认为真的有这个词,但如果有的话,我想这是个问话的地方。)

EN

回答 4

Security用户

发布于 2019-01-07 06:17:28

我相信你正在寻找的术语是输入验证和消毒。正如您前面提到的那样,它具有足够的通用性,可以应用于多个攻击变体。它还将包括防止攻击,如缓冲区溢出,防止试图执行超过设计限制的输入代码。

编辑-根据更具体的范围添加注释

在提供的具体用例中,您处理的是基于Web的攻击,您更关心的是告诉客户什么是数据和什么是代码。使用这个特定的示例,我们将深入了解HTTP协议,以显示针对这种通信类型的客户端和服务器存在哪些保护。其他协议的术语可能各不相同,但不能指望我在简短的回答中写出每个协议的通信情况。

从HTTP开始最好的地方是Hyper文本标记语言。HTML是从服务器到客户机上的web浏览器进行数据通信的基础。客户端有一组库,使它能够正确地解释接收到的数据并根据预先编程的逻辑采取行动。默认情况下,除非显式声明为代码,否则所有接收的数据都被视为数据。在HTML中,这是通过脚本块完成的,它是所有客户端脚本发生的地方。

现在,如果恶意参与者找到了一种注入广告或修改服务器代码以向数据流中提供附加块的方法,而这些数据流原本不是用户想要使用的,那么这种情况可能会引起关注。这就是注入攻击开始取代它们的地方,并且需要客户端和服务器来缓解。

在客户端,客户端需要确保维护最新的更新,并查找HTTP会话中任何可脚本组件的缺陷。Flash更新、最近的JavaScript零日以及许多其他组件表明,支持客户端解释服务器发送的数据的逻辑是正确的。同样重要的是,客户端要防止任何类型的攻击,这些攻击允许攻击者使用浏览器将数据从用户的计算机中提取回远程服务器。

在服务器端,服务器必须确保正确处理所有请求,包括接收来自GET或POST事务的数据。如果不这样做,攻击者可能会影响服务或将代码嵌入到以前良好的网页中。数据处理/输入清理是这里的关键。

因此,答案可能是“没有一个固定的术语”,但这是因为事务被假定为数据,除非标记语言另有指示。这就是为什么客户端可以关闭java脚本并仍然浏览网页的原因。他们接收所有相同的数据(当然不包含AJAX调用),但是他们不会将数据解释为代码,因为引擎已经被删除了。

票数 5
EN

Security用户

发布于 2019-01-07 15:54:35

我不知道这个词是否有一个词,但在实践中,我听说这被称为“代码和数据的分离”。

然而,这不仅仅是安全问题。这也是一个设计原则,让你的实际东西能够更容易地配置一个程序。例如,如果您的代码中隐藏了配置值,则更改配置值意味着必须编辑源代码,可能需要重新编译,并让更多知识渊博的人员执行此任务。

值得注意的是,这个想法可以追溯到20世纪40年代,我们目前的"Von体系结构“将数据与代码一起存储在内存中。在此之前,“代码”是硬连接到机器上的,如果不对计算机进行物理重新布线,就无法进行修改。Von体系结构允许很容易地修改代码,因为它只是在内存中存储信息。正如我们所发现的,这是一把双刃剑,同样的灵活性导致了许多安全问题。(引出您正在讨论的解决方案,更明确地将两者分开)

值得注意的是,作为一项设计原则,有些人主张不将代码与数据分离。例如,看看Lisp这样的语言。

票数 5
EN

Security用户

发布于 2019-01-07 17:23:51

如果有帮助:perl使用“污染”的概念,其中输入数据被“污染”,在某些情况下(例如,构造文件名)直到验证/净化后才能使用。

票数 2
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/200938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档