- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
BS程序代码与安与基本攻击
BS程序代码与安全与基本攻击/防御模式
BearOcean 2008-06-02
1.??? 引言
1.1.???? 文档说明:
1.2.???? 文档组织方式:
2.??? 正文
2.1.???? SQL注入
2.1.1.????? 攻击模式:
2.1.2.????? 防御办法:
2.2.???? 脚本注入
2.2.1.????? 攻击模式
2.2.2.????? 防御方式
2.3.???? 跨站攻击
2.3.1.????? 攻击模式
2.3.2.????? 防御方式
2.4.???? shell 上传
2.4.1.????? 攻击模式
2.4.2.????? 防御方式
2.5.???? 爆破
2.5.1.????? 攻击模式
2.5.2.????? 防御方式
3.??? 结语
?
?
?
1.???????? 引言
1.1.??????? 文档说明:
该文档主要阐述在BS程序中,安全性方面的注意事项。常见的主要攻击模式,以及为了防御这些不同的攻击手段,作为技术人员建议注意的编码事项。
该文档包含的内容主要是个人对于Internet 安全性问题的理解。以及对这些问题进行规避的方法整理,难免有误,也欢迎大家进行指正和补充。
另注: 该文档出现的编码均为伪代码。
1.2.??????? 文档组织方式:
该文档主要按照攻击模式进行分类整理,每个攻击模式的小专题分2部分内容:
(1) 攻击模式详述
(2) 防御方式与建议
对于攻击模式详述部分,尽可能多的举出案例来进行说明,已方便理解。而防御方式,实际上通常只有在对攻击模式理解的前提下,才可能真正确保防御的有效。
2.???????? 正文
2.1.??????? SQL注入
2.1.1.?????? 攻击模式:
SQL 注入的成因主要是因为向DB提供的SQL 是用字符串拼装的方式生成的。
最经常遭受SQL注入的页面通常是管理员/用户登陆点。不论是asp 或是jsp,如果不正确的编码,都会出现这个漏洞。
下面以一个实例来阐述SQL注入的成因。
假设我们有一个JSP 页面login.jsp,用于搜集管理员输入的用户名和密码。用户点击按钮,将会把收集到的用户名与密码提交到指定的控制组件(Struts:Action,或者Servlet).在该组件中调用chekLogin(String userName, String passWord) 进行登陆验证,以从页面收集到的用户名和密码信息拼装出SQL 字符串,供DAO 下层使用,以从数据库中的管理员记录表中读取数据,如果从表中找到匹配的记录,则表示验证成功,我们将返回相应得管理员实体类。否则返回Null 表示登陆验证失败。
这是一个非常简单的逻辑模块,如下图所示:
这个逻辑产生注入漏洞的关键在于checkAdminLogin方法。因为在该方法中,我们以这种方式进行编码: public Admin checkAdminLogin(String userName, String password){
//拼装SQL字符串 String strSQL =”SELECT * FROM TD_ADMIN AS A WHERE A.USERNAME=’”+userName +”’ AND A.PASSWORD=’”+password+”’”;
//后续通过DAO 提交该SQL到数据库获得查询结果,省略
这个生成SQL 的方式,记得刚接触数据库编程的时候,有很多书籍的范例代码也是这样书写的,咋一看没有什么问题,但是由于没有对可能的输入作一个全面的考虑,所以便产生了注入漏洞。如果有人试图在这里进行恶意攻击,那么他可以在登陆名输入框中输入 123 (其实其他的任意值也可) 而在密码输入框中输入 ‘ OR ‘1’=’1
那么由于我们的SQL是靠拼出来的,所以最终提交给数据库的将是: SELECT * FROM TD_ADMIN AS A WHERE A.USERNAME=’123’ AND A.PASSWORD=’’ OR ‘1’=’1’
很显然,这句SQL 由于后面被加上了永真条件,登陆是一定成功的。那么不论登陆者是否是管理员,输入 ‘ OR ‘1’=’1 ,他都将能够登陆系统。
更有甚者,我可以在输入框中输入数据库的SQL注释符,然后填写我想让数据库执行的操作例如DROP SOMETABLE 一类的。所以注入漏洞的危害实际是非常大的。
SQL 注入漏洞的根本原因是,由于我们编码时的不小心,导致用户可以通过输入来改变要执行的逻辑,甚至输入新的逻辑。但是,越是严重和显而易见的代码安全问题,实际要修补却也是越容易的。
2.1.2.?????? 防御办法:
A: 加上验证(或者字符过滤)
在网上搜索关于对SQL 注入的防护问题,有很多答案提供的是对输入字符串
文档评论(0)