常见系统安全漏洞及解决方案

发布时间:2023-12-07 09:00

一、SQL注入漏洞

漏洞说明

SQL注入攻击是Web安全领域中一种最为常见的攻击方式,其本质是将用户输入的数据当做SQL语句代码一部分执行。这些攻击通常是发生在将不可信的数据作为命令或查询语句的一部分,拼接到程序代码中,作为可执行程序的一部分指令执行,从而执行了计划外的命令,或访问了未被授权的数据。要解决注入攻击,必须遵循 “数据与代码分离”的基本原则。

解决方案

1.对SQL调用,要求所有的SQL语句及存储过程的执行,都使用预编译语句绑定变量,禁止将参数通过字符串拼装的方式组合到SQL语句中。

2.变量在传入SQL执行之前需要通过数据校验。

3.必须将所有SQL拼装参数,不能有1=1或是value ='" + value + "'"等之类的代码。

二、跨站脚本攻击(跨站点脚本编制)

漏洞说明

跨站脚本攻击,英文全称Cross Site Script,简称XSS。是指通过HTML注入,篡改了网页,插入了恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java, VBScript, ActiveX, Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

XSS攻击类型可分为:

  • 反射型XSS:只是简单的把用户输入的数据“反射”给浏览器,需要用户点击过一个恶意链接后才能攻击成功,所有的代码及攻击都是在客户端完成,也称为“非持久型XSS”。
  • 存储型XSS:把恶意代码脚本存储在服务端,当用户访问系统时,在浏览器中生成并执行恶意代码,也称为“持久型XSS”。
  • DMO Based XSS:通过修改页面的DOM节点形成的XSS。

XSS其本质是一种“HTML”注入技术,用户输入的数据被当做了HTML代码的一部分被执行,从而使代码原来的意图发生变化,XSS攻击都是发生在View层,因此仅仅对用户提交的数据进行检查还不能完全解决问题。

由于可能引起XSS的漏洞很多,要防范XSS攻击,必须在开发阶段就从服务端、客户端、输入、输出等多个方面入手解决。

解决方案

1.对所有页面,统一设置UTF-8字符集编码:

2.对特殊字符的过滤:

通过实现filter过滤器的方式处理一些敏感的、非法字符和关键字,并且需要在服务端的代码中实现对用户输入的校验,输入校验必须实现对以下特殊字符的校验或是编码转义:

[1] |(竖线符号)

[2] & (& 符号)

[3];(分号)

[4] $(美元符号)

[5] %(百分比符号)

[6] @(at 符号)

[7] '(单引号)

[8] "(引号)

[9] \'(反斜杠转义单引号)

[10] \"(反斜杠转义引号)

[11] <>(尖括号)

[12] ()(括号)

[13] +(加号)

[14] CR(回车符,ASCII 0x0d)

[15] LF(换行,ASCII 0x0a)

[16] ,(逗号)

[17] \(反斜杠)

3.会话Cookie中缺少httponly属性,会话cookie中缺少HttpOnly属性会导致攻击者可以通过程序(JS脚本、Applet等)获取到用户的Cookie信息,造成用户Cookie信息泄露,增加攻击者的跨站脚本攻击威胁。

解决办法:

1)需要先确定现场应用服务器weblogic版本是否为9.2.3以上版本,才会对以下增加的内容生效。

2)对SessionID,在web/WEB-INF目录下增加weblogic.xml文件,如果已经存在此文件,将SessionID的Cookie增加HttpOnly属性,如下配置:


    false
---为增加内容

需要重启应用服务器

4.对自定义Cookie,在J2EE中,为Cookie添加HttpOnly的代码如下:response.setHeader(“Set-Cookie”,”name=value;HTTPOnly”);

 5. 将代码输出到客户端时,按照变量输出位置的不同,分别采用不同的编码方式对输出变量值进行编码。

  • 在HTML标签中输入变量时,先将变量HtmlEncode
  • 在HTML属性中输出变量时,先将变量HtmlEncode