漏洞分类及判定方法
-
漏洞分类及判定方法
A1
–注入
原因:代码中的逻辑裸依赖于外部的输入。
< br>分支:
SQL
注入、
OS
命令注入、
XPATH
注入、
LDAP
注入、
JSON
注入
、
URL
注入
名称
现象
解决方法
SQL
注
入
程序把用户输入的一段字符串直接用在了
拼凑
< br>sql
语句上,导致了用户可以控制
sql
语句,比如加入
delete
的行为、绕过用户
p>
密码验证等
使用参数形式调用
sql
使用存储过
程(存储过程中不要使用动态
sql
拼语句)
< br>
使用
Linq,
EF
等框架来写(不要使用里面
的直接拼
sql<
/p>
语句的方式)
OS
命令
因为是由程序拼凑命令行(包括参数)来实
业务逻辑层
要验证是否合法输入
注入
现调用外部程序的,因此用户也能够通过小
计量来突破限制,实现调用其
他外部程序
通过
s
< br>来实
现调用外部程序
XPATH
注入
//Employee[UserName/text()=’aaron’
解决方法和
sql
类似,也是对查询进行参
p>
and
password/text()=’password’]
à
//Employee[UserName/text()=’aaron’
or 1=1 or ‘a’ =’a’ and
password/text()=’password’]
这个和典型的
sql
注入一样,呵呵<
/p>
数化,如下:
Declare variable $$userName as xs:
string external;
Declare
variable $$password as xs:
string
external;
//
Employee[UserName/text()=$$userName
and password/text()=$$password]
< br>LDAP
注
LDAP
查询和
p>
sql
查询类似,
也是可以通过拼
入
字符串得来的,因此页存在注入漏洞
JSON
注
{‘user’:
‘usera’,
‘sex’,
‘boy’}
传统
< br>webform
下,使用
来实现
入
à
{‘user’: ‘usera’, ‘sex’,
‘bo’y’}
这样会导致
js
报错
json
数据的生成
Mvc
下,使用
JSONResult
来生成
json
数
据
URL
注
入
/?p1=a&p1=b
这个认识的还不够深入,而且和服务
器端
语言有关,只要
会把几个参数
p>
如果还有个
cookie
,
name
为:
p1,
value:
c
value
合并起来,其他语言都只取到一个,
则,
最终
获取这个参数的
value
为:
但是取到的是第一个还是最后一个,就看
a,
b,c
语言了。
这个和业务逻辑有很大的关系
A2
–失效的身份认证和会话管理
原因:
Session
相关的数据没有被完整替换导致的安全问题
p>
解决关注点:
Login
通过后,
立刻把当前
Session
< br>(包含
Session,
Cache,
Cookie
)
失效掉,
把
需要保存进
Session
的
valu
e
重开一个
Session
保存进;<
/p>
Logout
功能中,除了把当前
Ses
sion
失效掉外,还要把
Session
相关的
Cache
也
remove
掉
登录
<
/p>
在
login
验证事件中,一旦合法身份
验证通过后,
就要把
()
,
来重新获得新的
Se
ssion
(此时客户端的
session cookie v
alue
也会被
reset
成新的)<
/p>
注销
Session
要
Abort
相关的缓存要
clear
额外的
p>
cookie
也要被
clear
A3
–
跨站脚本(
XSS
)
原因:和
Injection
类似,只不过
xss
的关注点落在了
html, javasc
ript
注入上,由于内
容比较多,因此单独拉出来,成为了<
/p>
XSS
分支:反射式
XSS
、存储式
XSS
、基于
D
OM
的
XSS
解决关注点:
html
的输入输出编码、
javascrip
t
的编码、
url
的编码
名称
现象
解决方法
反射
由于服务器端直接调用了客
对用户输入的数据要过滤特殊字符
式
户端用户输入的数据(没有
对输出到
客户端的数据也要过滤特殊字符
Html, js,
url
三大领域过滤方法不同,需要区别对待
code;
XSS
经过无害化处理
),导致了
对广大客户端用户的损害
比如获取客户端用户在某网
站的所有
cookie
,这样恶意
code;
用户就能实现
session
劫持
等更进一步的攻击
ode;
存储
存储式<
/p>
XSS
比反射式
XSS
< br>更
hEncode;
式
加深远
,范围更广;因为这
Js
函数如下
XSS
种未经处理的代码是保存到
数
据库中的,因此时间、范
围都比较广
ode;
基于
AJAX
程序中,
JS
代码没有过
J
s
中使用
escape
函数来过滤特殊
字符,
包括元素
value
、
元
DOM
的
滤
/
转换用户输入的文本,
导
素
Attribute
,都要
en
code
起来
致了对
DOM
元素的结构性影
escape,encodeU
RI,encodeURIComponent
的使用参考
go
ody9807
的这篇文章:
/go
ody9807/archive/2009/01/16/
XSS
响,或者导致了行为性的影
响
Anti
脚本过滤库,具体使用方法参考木子的这篇文章:
-XSS
/moozi/archive/2010/03/04/
Anti
SRE: Security Runtime
Engine
的缩写
-XSS
SRE
/b/syedab/archive/2009/0
7/08/preventing-cross-site-scrip
是一个更智能的过滤系统,具体使用参考
Syed
的
这篇文章:
ASP.
<%=Html
%>à
不会进行转换
NET
MVC
4
[AllowHtml]tag
尽量不改动默认的
ValidateRequest
属性
<%: Html%>à
会进行转换
A4
–不安全的直接对象引用
p>
原因:
/?userId=1
,
容易认为的进行猜测
userId=2
等等,
p>
如果没有判断权限,就容易出现信息泄露的问题;但是如果
url<
/p>
是
/?userId=ABAWEFRA
则很难进行猜测
解决关注点:
url
参数的编码和解码