在像 sql 注入这样的编码过程中可以处理哪些攻击类别?

what are the categories of attacks that can be handled during coding like sql injection?

Web 应用程序或本机应用程序中的编码期间或代码中可以处理的攻击类别有哪些,例如 sql 注入和 cross 站点脚本 (XSS) ?

编辑:由于答案被搁置,我只想要 most 常见或前 5 名的名称,这些名称可以在编码中处理,而不是服务器(hosting)或网络或os 个问题。

编辑 2:我已将其缩小到因保留而导致的攻击类别。

下面的答案是相对于SQL Injection and HTTP Response Splitting.

当应用程序在应用程序的行为中直接使用用户输入时,就会发生这种利用。这被认为是不好的做法,并且会导致任何应用程序多次遭到破坏,例如 Cross-site-scripting (XSS)、主机 Header 攻击(将 HTTP 请求中的 Host header 修改为执行恶意行为)。

那么直接接受用户输入是什么意思?假设您有一个简单的表单,包含一个 Person ID 字段和一个提交按钮。一旦提交按钮,系统会动态生成一个 SQL 查询来匹配用户所需的信息。

SELECT * FROM Users WHERE PersonID = '$person_id'

此查询采用了错误的假设,即用户应该是值得信任的,但事实绝不会如此。那么为了防止这种情况,在您的代码中采取什么好的步骤呢?准备好的语句,尽可能进行参数查询。

我从上面的维基百科 link 中摘取的常见示例:

$mysqli = new mySqli('hostname', 'db_username', 'db_password', 'db_name');
$query = sprintf("SELECT * FROM `Users` WHERE UserName='%s' AND Password='%s'",
$$mysqli->real_escape_string($Username),
$$mysqli->real_escape_string($Password));
$mysqli->query($query);

Cross-site-scripting (XSS) 通常通过编码的特殊字符来缓解,允许浏览器 显示 实体但 运行 他们。下面是一个很好的列表,显示了某些字符是如何编码的。我强烈建议访问 this article 以进一步了解它或查看我在下面提到的 Web 漏洞词典。

请注意,此处适用与 SQL 注入相同的概念。用户输入 从不 是可信的。

<?php
$name = $_GET['name'];
echo "Welcome $name<br>";
echo "<a href="http://xssattackexamples.com/">Click to Download</a>";
?>

查看上面的示例,您会注意到 $name 是一个存储变量,稍后在代码中直接引用它。现在,恶意用户不再查询名称 Bob(例如),而是查询 <script>alert('attacked')</script>。使用上面的代码,这个查询将在 web 应用程序中执行上面的命令(这可能比这更严重)。


HTTP 响应拆分

黑客可能能够找到一个 header 注入漏洞,该漏洞允许他制定一个请求,将整个 HTTP body 注入响应和另一个第二个响应 body(可能听起来有点混乱)。本质上,服务器会将其识别为链接在一起的两个独立请求——这就是为什么它被称为 HTTP 拆分,因为您正在有效地拆分服务器的响应。

我之所以决定将这个漏洞放在这个答案中,是因为它是最容易利用的漏洞之一,不需要太多的知识,并且会使您的应用程序面临 XSS 等主要漏洞。执行此漏洞的关键字符是 %0d%0a——更正式的名称是 CRLF(回车符 Return 和换行符),这对许多协议来说都是必不可少的,因为它标志着一行的结束(停产)。

如果您的 Web 应用程序未使用上述方法正确处理此类字符,那么恶意用户的输入可能会影响服务器的行为,这显然是我们不希望发生的事情。

我们来看一个部分例子:

http://www.yoursite.com/somepage.php?page=%0d%0a
Content-Type:text/html%0d%0aHTTP/1.1 200 OK%0d%0a
Content-Type:text/html%0d%0a%0d%0a%3Chtml%3EHacker Content%3C/html%3E

当用户单击上面的 link 时,将显示 <html>Hacker Content</html> 页面。有趣的部分?这是通过您的服务器完成的。您易受攻击的服务器正在为受害者提供这种恶意内容。

有关这方面的更多信息,我建议阅读这篇 Acunetix CRLF Injection below and OWASP's HTTP Response Splitting 文章


可以通过多种方式缓解 Web 应用程序上的漏洞,但是在研究特定漏洞之前,最好先了解系统结构以及它本身是否脆弱并容易受到攻击(许多人都在监督这个问题)。

其余的完全可以通过互联网获得。当涉及到 Web 应用程序安全性时,我鼓励阅读来自不同作者的大量文章。

我发现的一个非常有用的 link 是 Acunetix 的 Web Vulnerabilities dictionary,它提供了有关所需漏洞、常见补救技术以及社区文章的详细但不过分详细的描述。