OWASPTOP10WEB安全中文版Word文档下载推荐.docx
- 文档编号:14151554
- 上传时间:2022-10-19
- 格式:DOCX
- 页数:29
- 大小:41.32KB
OWASPTOP10WEB安全中文版Word文档下载推荐.docx
《OWASPTOP10WEB安全中文版Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《OWASPTOP10WEB安全中文版Word文档下载推荐.docx(29页珍藏版)》请在冰豆网上搜索。
A1-注入
A1-跨站脚本〔XSS〕
A2-跨站脚本〔XSS〕
A7-错误的认证和会话管理
A3-错误的认证和会话管理
A4-不正确的直接对象引用
A5-伪造跨站请求〔CSRF〕
A6-平安性误配置
A10-限制远程访问失败
A7-限制远程访问失败
A8-未验证的重定向和传递
A8-不平安的加密存储
A9-不平安的加密存储
A9-缺乏的传输层保护
A10-缺乏的传输层保护
A3-恶意文件执行
A6-不平安的通讯
OWASP风险评估方法
OWASP所选取的10大风险是依据OWASP的风险评估方法,我们从标准的风险模型开始,即风险=可能性*后果,下面我们以以下步骤来说明某个风险的严重程度:
第一步:
识别风险
识别风险作为评估的第一步,我们必须找到与这个风险相关的威胁、相应的攻击方法、隐含在里面的脆弱性以及最终可能造成的后果,当然可能存在多种攻击方法和多种后果,在评估时我们往往会采用最坏选择,这样就能更客观的反响该风险的最终评级;
第二步:
考虑影响可能性的因素
通常,我们不可能很精准的说出某个风险的可能性数值,所以我们一般用高、中、低来表示,而且影响某个风险的可能性的因素有很多,对于每个因素我们用0到9的数值来表示。
类别
因素
分项
分值
威胁
技能要求
无需技能
1
需要一些技术
3
高级的计算机用户
4
需要网络和编程技术
6
平安渗透技术
9
成功攻击后攻击者的益处
很低或无益
可能会有回报
高回报
所需资源或时机
需要很大资源或高权限访问
需要特定的访问权限和特定的资源
需要一些访问权限和资源
7
无需权限或资源
所需的攻击者的角色
开发者
2
系统管理员
内部用户
合作伙伴
5
认证用户
匿名Internet用户
脆弱性
发现该弱点的难易度
技术上不可行
困难
容易
可用自动化工具发现
利用该弱点的难易度
只是理论上的
可用自动化工具实现
该弱点的流行度
不为人知
隐藏
明显
公众皆知
入侵被发觉的可能性
应用程序主动检测
记录日志并审核
记录日志未审核
8
无日志
第三步:
考虑影响后果的因素
在考虑攻击后果的时候,我们会考虑两种后果,一种是应用的“技术后果〞,它所使用的数据,提供的功能等等,另一种就是它的“商业后果〞,显然后者那么更为重要,但往往后者难以估量,所以我们需要尽可能从技术上去考虑,进而来估计后者的数据。
技术后果
保密性损失
很少的非敏感的数据泄漏
很少的敏感数据泄漏
大量的非敏感数据泄漏
大量的敏感数据泄漏
注入往往是应用程序缺少对输入进行平安性检查所引起的,攻击者把一些包含指令的数据发送给解释器,解释器会把收到的数据转换成指令执行。
常见的注入包括SQL注入,OSShell,LDAP,XPath,Hibernate等等,其中SQL注入尤为常见。
这种攻击所造成的后果往往很大,一般整个数据库的信息都能被读取或篡改,通过SQL注入,攻击者甚至能够获得更多的包括管理员的权限。
防范SQL注入——编程篇
SQL注入往往是在程序员编写包含用户输入的动态数据库查询时产生的,但其实防范SQL注入的方法非常简单。
程序员只要a〕不再写动态查询,或b〕防止用户输入包含能够破坏查询逻辑的恶意SQL语句,就能够防范SQL注入。
在这篇文章中,我们将会说明一些非常简单的防止SQL注入的方法。
我们用以下Java代码作为例如:
Stringquery="SELECTaccount_balanceFROMuser_dataWHEREuser_name="
+request.getParameter("customerName");
try{
Statementstatement=connection.createStatement(…);
ResultSetresults=Statement.executeQuery(query);
}
在以上代码中,我们可以看到并未对变量customerName做验证,customerName的值可以直接附在query语句的后面传送到数据库执行,那么攻击者可以将任意的SQL语句注入。
防范方法1:
参数化查询
参数化查询是所有开发人员在做数据库查询时首先需要学习的,参数化查询迫使所有开发者首先要定义好所有的SQL代码,然后再将每个参数逐个传入,这种编码风格就能够让数据库辨明代码和数据。
参数化查询能够确保攻击者无法改变查询的内容,在下面修正过的例子中,如果攻击者输入了UsrID是“’or‘1‘=’1〞,参数化查询会去查找一个完全满足名字为‘or‘1‘=’1的用户。
对于不同编程语言,有一些不同的建议:
JavaEE——使用带绑定变量的PreparedStatement();
PHP——使用带强类型的参数化查询PDO〔使用bindParam()〕;
Hibernate——使用带绑定变量的createQuery()。
Java例如:
Stringcustname=request.getParameter("customerName");
Stringquery="SELECTaccount_balanceFROMuser_dataWHEREuser_name=?
";
PreparedStatementpstmt=connection.prepareStatement(query);
Pstmt.setString(1,custname);
ResultSetresults=pstmt.executeQuery();
C#.Net例如:
Stringquery="SELECTaccount_balanceFROMuser_dataWHEREuser_name=?
Try{
OleDbCommandcommand=newOleDbCommand(query,connection);
command.Parameters.Add(newOleDbParameter("customerName",CustomerName.Text));
OleDbDataReaderreader=command.ExecuteReader();
}catch(OleDbExceptionse){
//errorhandling
防范方法2:
存储过程
存储过程和参数化查询的作用是一样的,唯一的不同在于存储过程是预先定义并存放在数据库中,从而被应用程序调用的。
Java存储过程例如:
CallableStatementcs=connection.prepareCall("callsp_getAccountBalance(?
)}");
cs.setString(1,custname);
Resultresults=cs.executeQuery();
}catch(SQLExceptionse){
//errorhandling
VB.Net存储过程例如:
Try
DimcommandAsSqlCommand=newSqlCommand("sp_getAccountBalance",connection)
commandmandType=CommandType.StoredProcedure
command.Parameters.Add(newSqlParameter("@CustomerName",CustomerName.Text))
DimreaderAsSqlDataReader=command.ExecuteReader()
‘…
CatchseAsSqlException
‘errorhandling
EndTry
防范方法3:
对所有用户输入进行转义
我们知道每个DBMS都有一个字符转义机制来告知DBMS输入的是数据而不是代码,如果我们将所有用户的输入都进行转义,那么DBMS就不会混淆数据和代码,也就不会出现SQL注入了。
当然,如果要采用这种方法,那么你就需要对所使用的数据库转义机制,也可以使用现存的诸如OWASPESAPI的escapingroutines。
ESAPI目前是基于MySQL和Oracle的转义机制的,使用起来也很方便。
一个Oracle的ESAPI的使用例如如下:
ESAPI.encoder().encodeForSQL(newOracleCodec(),queryparam);
那么,假设你有一个要访问Oracle数据库的动态查询代码如下:
Stringquery="SELECTuser_idFROMuser_dataWHEREuser_name=‘"+req.getParameter("userID")+"’anduser_password=‘"+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OWASPTOP10WEB 安全 中文版