在编码期间或在Web应用程序或本机应用程序中使用sql注入和跨站点脚本(XSS)等代码可以处理哪些类型的攻击?
编辑:由于答案处于暂停状态,我只想要最常见或前5名,可以在编码而不是服务器(托管)或网络或操作系统问题中处理。
编辑2:我已将其缩小为因持有的攻击类别。
答案 0 :(得分:0)
以下答案与SQL Injection和HTTP Response Splitting有关。
当应用程序在应用程序的行为中直接使用用户输入时,将发生这种利用。这被认为是不好的做法,并为跨站点脚本(XSS),主机标头攻击(修改HTTP请求中的Host
标头以执行恶意行为)等事件打开了多个违规应用程序。
那么直接接受用户输入是什么意思?比如说你有一个简单的表单,包含一个Person ID
字段和一个提交按钮。一旦提交按钮,系统动态地生成SQL查询以匹配用户所需的信息。
SELECT * FROM Users WHERE PersonID = '$person_id'
这个查询需要采用不正确的假设,即用户应该被信任,这应该永远不会是这种情况。那么为了防止这种情况,采取代码的一个好步骤是什么?准备好的语句,尽可能参数查询。
我从上面的维基百科链接中获取的常见示例:
$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);
跨站点脚本(XSS)通常通过编码的特殊字符来缓解,允许浏览器显示实体,但不运行它们。下面是一个很好的列表,显示了某些字符的编码方式。我强烈建议您访问this article以进一步了解它,或者查看我在下面提到的Web漏洞词典。
请注意,此处适用与SQL注入相同的概念。用户输入 NEVER 值得信任。
<?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主体注入响应和另一个第二个响应主体(可能听起来有点混乱)。本质上,服务器会将此识别为两个单独的请求链接在一起 - 这就是为什么它被称为HTTP Splitting,因为您有效地分割了服务器的响应。
我之所以决定将此漏洞置于此答案中,是因为它是最容易利用的漏洞之一,它不需要大量的知识,并且可以将应用程序打开到XSS等主要漏洞。执行此漏洞的关键字符是%0d%0a
- 更正式地称为CRLF
(回车和换行),这对许多协议都很重要,因为它标记了行尾(EOL)。 / p>
如果您的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
当用户点击上述链接时,该链接将随<html>Hacker Content</html>
页面一起提供。有趣的部分?这是通过您的服务器完成的。您易受攻击的服务器正在为受害者提供这种恶意内容。
有关此问题的详情,建议您阅读以下Acunetix CRLF Injection和OWASP's HTTP Response Splitting文章
可以通过多种方式缓解Web应用程序中的漏洞,但在研究特定漏洞之前,最好先了解一下系统结构,以及它本身是否容易受到攻击(许多人都会监督这个问题)。
其余部分完全可以通过互联网获得。我鼓励在Web应用程序安全性方面阅读大量来自不同作者的文章。
我找到的一个非常有用的链接是Acunetix的这个Web Vulnerabilities dictionary,它提供了很好但没有过于详细的描述所需的漏洞,常见的补救技术以及社区文章。