全部博文(107)
分类: 系统运维
2012-10-31 20:21:38
漏洞攻击的总结
Command Injection (CWE 77) - 命令行注入攻击
命令行的攻击主要是命令行中的变量通过传输形式将整体的命令拼凑在一起所发形成的攻击,这里所说的传输形式,如:“POST、GET”。这样破坏者会对所传输的数据进行破坏。所以在执行命令中的变量就是要去分析时候已经收到了破坏。防范的方法就是将变量中的字符串进行命令转义。
PHP:$cmd=escapeshellcmd($_GET[ 'IP' ]);
Cross-Site Scripting (CWE 79) - 跨站攻击脚本
跨站攻击脚本主要是因为将存在可执行的代码,写入到了软件中,每次在执行或者显示攻击脚本的内容时会触发此脚本进行攻击。大多存在跨站攻击脚本是在提交表单中,或者留言评论等模块中较为多见。防范的方法就是将这些WEB中可以执行脚本的关键字或者关键字符进行屏蔽或者替换。
PHP:htmlentities($_GET['foo'], ENT_QUOTES);?>
SQL Injection (CWE 89) - SQL注入攻击
SQL注入攻击是很常见的一种攻击,它与其他的攻击形式一致也是通过POST或者GET等。其中传输数据中带有就带有破坏性语句,然后执行SQL语句进行破坏,其程度是相当恐惧的。但是各个数据库的防范措施不同,在我所研究的MSSQL中,数据库本身就带有保护措施,对于损坏数据的内容进行不予执行,使其内部的。在我们所编写的代码中也要帮数据库进行分担这方面的操作。我们需要保护什么呢?那就是变量。字符串和我们所设置的变量一起构成了一条SQL语句,所以要保护的就是变量的正确性。
PHP方面有着多种防如原始的mysql类中,在组成SQL语句的时候对于变量的字符类型要进行控制,同时所有的变量进行SQL转义,我们会用到mysql_real_escape_string()方法,但是有些落后了,现在在执行的PHP连接SQL所使用到的是PDO的万能驱动,他可以连接各种数据库,他有一个对于字符串进行统一的转义方法quote()方法
Resource Injection (CWE 99) - 资源注入攻击
如果要是说SQL注入是很可怕的,那么防范资源注入就是很繁琐的,如何来防止这些问题的发生呢?要注意下面的几个内容。
1. 对于所上传的内容需要控制临时路径,即使是系统默认的临时路径也要编写到源码中,不能够把这个权利交给编码自身;
2. 指定的临时路径,那么临时文件要怎样处理呢?在PHP中是以basename()来获取到真实文件名称,这样可以避免文件名称不规范或者是有些恶意内容;
3. 就是针对于用户在使用网站或者系统,上传的数据判断。上传数据的检测,在PHP中通过is_uploaded_file()方法来对于上传的文件是否合法进行了判断,可以规避掉资源注入的问题。在所实践中我也发先新的方法,但是没有经过代码测试不知道漏洞扫描是否认可,就是通过PHP的$_FILES['testfile']['error']的错误代码进行测试上传文件。
4. 在所要执行的路径中不能以字符串形式进行完全操作,可能需要变量在其中进行辅助来设置代码的完整路径,这样对于这个变量则需要进行处理特殊字符替换等操作。如:\ * ? 。
5. 在修改漏洞的过程中,对于将一些敏感的数据进行unicode的处理也能够被漏洞扫描软件认可,可以是一个万能方法吧!