互联网系统安全开发指南Word下载.docx
《互联网系统安全开发指南Word下载.docx》由会员分享,可在线阅读,更多相关《互联网系统安全开发指南Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
16.严格过滤用户输入14
17.敏感信息处理防护15
18.错误信息处理15
19.目录权限管理15
本文档是光大银行WEB开发安全指南,我行所有面向互联网提供服务的WEB系统都应遵守本指南的要求。
相关项目组和人员在软件开发、变更、上线时应确保满足下列要求。
1.跨站脚本防护
跨站攻击,即CrossSiteScriptExecution(通常简写为XSS)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
防护指南:
(1)开发者应严格的对input,output和将要被存储到服务器的数据进行严格的过滤并进行并使用正确的编码,而不是简单的过滤一些常见的敏感字符,任何一个泄露都可能会被利用,因为CSS攻击是相当灵活的;
(2)应使用白名单方式对各种变量输入输出进行合法检验,而不应该使用黑名单。
(3)过滤内容:
Ø
过滤”<
”、”>
”将用户输入放入引号间,基本实现数据与代码隔离;
过滤双引号,防止用户跨越许可的标记,添加自定义标记;
过滤TAB和空格,防止关键字被拆分;
过滤script关键字;
过滤&
#防止HTML属性绕过检查。
2.防止内部IP地址泄露
开发人员可能在开发某一功能时候,将说明性的文字保存在Web页面中。
造成安全隐患。
删除包括WEB服务器安装文件,安装说明文件,开发测试时候的备份文件等;
开发人员在开发时,使用注释泄露了内部信息,删除即可。
开发人员在以后的开发过程当中,一定要注意在发布页面时,检查注释有没有泄露敏感信息,包括WEB服务器安装文件,安装说明文件,开发测试时候的备份文件等。
3.防止个人身份信息篡改
POST多数是带有表达式,如注册用户名和投票指定的用户ID就会用到POST来提交。
所以会造成工具者截取提交数据后进行修改再进行提交。
对用户提交的字段加上权限限制,防止攻击者修改数据后提交。
4.防止SQL注入漏洞
SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,这类表单特别容易受到SQL注入式攻击。
最小权限原则。
特别是不要用dbo或者sa账户,为不同的类型的动作或者组建使用不同的账户,最小权限原则适用于所有与安全有关的场合;
对用户输入进行检查。
对一些特殊字符,比如单引号,双引号,分号,逗号,冒号,连接号等进行转换或者过滤;
使用强数据类型,比如你需要用户输入一个整数,就要把用户输入的数据转换成整数形式;
限制用户输入的长度等等。
这些检查要放在server运行,client提交的任何东西都是不可信的;
使用存储过程,如果一定要使用sq语句,那么用标准的方式组建sql语句,比如可以利用parameters对象,避免用字符串直接拼sq命令;
当sql运行出错时,不要把数据库返回的错误信息全部显示给用户,错误信息经常会透露一些数据库设计的细节。
5.防止数据库权限过高
一旦脚本代码存在风险,即可通过执行SQL语句读取服务器硬盘所有内容、进行写操作、提升为系统权限进行进一步渗透等风险。
防护指南:
修改SA密码,然后针对每个站点建立1个MsSQL数据库账号,只给予Public权限,严格控制使用SA账户进行连接。
6.防止CMS版本泄漏
由于未对原始CMS版本进行有效屏蔽,导致请求某些模块时可返回真实CMS的程序名称与版本,攻击者可在互联网孩中查找该CMS历史出现过的漏洞,可直接利用现成的漏洞利用程序进行入侵与渗透;
此外恶意攻击者也可从CMS官方下载网站使用的源程序,可对此源程序进行代码级的漏洞分析与挖掘,网站的深层次漏洞被发掘后可进行针对性的利用。
站点在发布时可以对代码进行修改或者删除原版本信息。
7.防止整站代码泄漏
有时候管理员可能在备份数据后,未对备份的数据进行删除,导致可以下载,造成的安全隐患。
防护指南:
开发人员在开发时,使用注释泄露了内部信息,删除即可;
8.防止后台管理验证码失效
后台登陆页面可以让普通用户访问,并且验证码未生效,一直显示“1234”可导致攻击者使用密码破解工具进行尝试。
可以修改后台登陆页面路径,避免攻击者猜到路径并进行登陆,立即修改验证码相关程序,使其生效。
9.禁止目录浏览
除非特定需要,否则所有WEB服务中都应该禁止目录浏览权限。
因为这可能会给恶意入侵者收集服务器信息,进一步入侵服务器带来机会。
IIS配置:
打开IIS管理器,网站属性,选主目录,把其中的目录浏览前面的勾去掉;
SunOne/iPlanetWebServer配置:
打开管理控制台,选上面的标签:
VirtualServerClass。
然后在SelectaClass中选择当前使用的Class默认为defaultclass。
然后点Manage。
之后点上面的标签ContentMgmt。
在左侧列表中选择:
DocumentPreferences。
在配置界面的DirectoryIndexing中选择none。
Filetouseforerrorresponsewhenindexingisnone后面可以填默认页面名称。
如果访问目录时候,存在这个页面就返回页面内容。
不存在就返回403错误。
WebLogic配置:
打开WebLogic控制台,在左边的树形菜单选择
MyDomain-->
Deployments-->
WebApplications-->
DefaultWebApp,在右边的工作区选择
Configuration-->
Files,将IndexDirectories勾去掉就是禁止webapp浏览目录以及其中的文件。
然后重新启动WebLogic服务使其生效。
10.清除无关网站内容
这里指的是实际WEB应用中所有不需要的内容。
包括WEB服务器安装文件,安装说明文件,开发测试时候的备份文件等。
本次渗透测试就发现手机银行的SunOne/iPlanetWebServer安装后的manual目录可浏览。
容易给恶意入侵者提供了服务器的相关信息。
有的编辑器如Ultraedit等在编辑文件后会以.bak为扩展名自动备份文件。
或者开发人员在开发新功能时候习惯性的将原始文件备份。
这在Web目录下存在会直接导致源代码泄露。
开发人员可能在开发某一功能时候,将说明性的文字保存在Web目录中。
这也是安全隐患。
对包含注释的文件进行及时检查与清理,在后续工作中,对每一个系统上线更新,都需检测是否有备份文件,与注释文件,以免信息泄露。
11.框架钓鱼防护
攻击者通过在网页中注入frame或iframe标记,在原有网页中插入了外部的假冒网页。
而合法用户浏览后,可能透明的过度到了恶意网站,攻击者便可以诱惑用户重新登录,然后获取合法用户登录凭证。
或者攻击者可直接在当前页面下植入假冒登录框来骗取用户的登录凭证。
在后期开发与维护时,需要仔细检查用户输入字符的类型,过滤比如单引号,双引号,分号,逗号,冒号,连接号等进行转换或者过滤;
12.HTTP报头协议追踪
TRACE是用来调试Web服务器连接的HTTP方式。
支持该方式的服务器存在跨站脚本漏洞,攻击者可以利用此漏洞欺骗合法用户并得到他们的私人信息(Cookie)。
在ServicePack2之后的版本,直接编辑obj.conf文件。
在<
Objectname="
default"
>
的后面添加如下内容:
<
Clientmethod="
TRACE"
AuthTransfn="
set-variable"
remove-headers="
transfer-encoding"
set-headers="
content-length:
-1"
error="
501"
/Client>
然后重启Web服务。
在ServicePack2之前的版本,需要自行编译服务器扩展:
#include"
nsapi.h"
NSAPI_PUBLICintreject_trace(pblock*pb,Session*sn,Request*rq)
{
constchar*method;
method=pblock_findval("
method"
rq->
reqpb);
if(method&
&
!
strcmp(method,"
)){
/*
*SetaboguscontentlengthsotheTRACEhandlerwillrefuseto
*handletherequest
*/
param_free(pblock_remove("
rq->
headers));
content-length"
pblock_nvinsert("
"
-1"
headers);
log_error(LOG_WARN,"
reject-trace"
sn,rq,"
rejectingTRACErequest"
);
protocol_status(sn,rq,PROTOCOL_NOT_IMPLEMENTED,NULL);
returnREQ_ABORTED;
}
returnREQ_NOACTION;
}
把以上内容保存为reject_trace.c。
然后根据版本参照:
进行编译后得到reject_trace.so文件。
6.0RTM和6.0SP1版本,编辑magnus.conf文件,在文件最后添加:
Initfn="
load-modules"
shlib="
pathtolibrary>
/reject_trace.so"
funcs="
reject_trace"
然后编辑obj.conf文件,在<
Objectname