资源预览内容
第1页 / 共33页
第2页 / 共33页
第3页 / 共33页
第4页 / 共33页
第5页 / 共33页
第6页 / 共33页
第7页 / 共33页
第8页 / 共33页
第9页 / 共33页
第10页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
安全开发手册安全开发手册1一、输入验证21.什么是输入22.输入验证的必要性23.输入验证技术2二、输出编码61.输出的种类62.输出编码的必要性63.输出编码64.常用测试输出方法9三、防止SQL注入91.什么是SQL注入92.SQL注入的种类93.如何防止SQL注入9四、跨站脚本攻击131.什么是跨站脚本攻击132.跨站脚本攻击的危害133.如何防止跨站脚本攻击144XSS漏洞另一个攻击趋势15五、跨站请求伪造161.什么是跨站请求伪造162.跨站请求伪造的危害163.如何防止跨站请求伪造17六、越权操作181.什么是越权操作182.越权操作的危害193.如何防止越权操作19七、IO操作安全19八、缓存泄漏201.什么是缓存泄漏202.防御方法20九、系统加密211. 主要防御方式21十、信息泄露22十一、日志和监测24十二、 Web.config的安全配置241.authentication节点242.authorization 节点243.customErrors 节点254.pages 节点26十三、综合实例讲解26参考资料33一、输入验证1.什么是输入 输入是编译时以外的全部数据交换。WEB应用程序从各种来源获取输入,例如所有用户发送的,或者应用程序运行的往返数据(用户提交的数据、视图状态、cookie、查询字符串参数等),以及后台数据(数据库、配置数据和其他数据来源)。所有输入的数据都会在某种情况下影响请求的处理。2.输入验证的必要性为什么输入验证如此重要?第一个原因非常明显:用户都不希望使用虚假的数据。应用程序会处理这些数据,根据它们得出结果,并最终存储到后台数据存储中。网络上的其他应用程序有可能在某种情况下需要这些数据,这些程序可能依赖于数据的正确性。(如果这些数据没有经过验证,就有可能会带来麻烦)一切从外部获取的数据都可能是恶意的,如果缺少对数据的验证,将会带来很多安全问题。如EMAIL 验证、用户名验证等。如:缺少对EMAIL的长度验证,在存储EMAIL时将出现数据库溢出错误。缺少对EMAIL的格式验证,在发送邮件时将会给程序带来错误等。3.输入验证技术3.1 主要防御方式防御手段一:验证控件验证保护级别:描述: 对于表现层, 可以利用验证控件,对用户输入的数据进行类型、大小、范围的验证。验证控件必须做到在客户端和服务端同时验证,客户端的验证可以减轻对服务端请求的次数和用户操作的方便性。服务端验证确保数据的正确性,同时也防止用户伪造请求绕过客户端的验证。优点: 验证简单有效,可重复使用,通常应用于客户端验证较多。缺点: 验证不完整,有些验证用户可以绕过。应用举例:动易SiteFactory系统中,除了使用VS自带的验证控件外,还扩展了和增加了部份验证控件,在PowerEasy.Framework.Controls 命名空间下,可以看到扩展的RequiredFieldValidator 控件,邮箱验证控件EmailValidator等。具体可以查看文件夹 Core Items 中PowerEasy.Framework.Controls项目下的ExtendedValidator文件夹。这些控件一般使用在用户输入的验证,如注册时用户名的验证:防御手段二:业务逻辑层验证保护级别:描述: 关键的地方(涉及到点数、金钱、权限)根据情况还需要在业务层或者数据访问层进行验证,以保证数据的合法性。对于HTML代码输入的地方,输入时一定要进行HTML格式化处理,否则有可能会引起全局显示错误。如输入:!- (html注释代码)等。优点:验证的最后防线,确保数据正确。应用举例: 动易SiteFactory系统中,在服务端的验证可以用到数据验证类,在命名空间PowerEasy.Framework.Common下的 DataValidator 类里的相关函数。如:IsNumber(数字)、IsIP(IP验证)、IsEmail(邮箱格式验证)等。这些验证函数通常应用在紧接着的客户端验证,或处理重要数据时的验证。如:发送邮箱时 SendEMail(string email)函数里的在发送邮件前验证邮箱是否正确:DataValidator.IsEmail(email)。防御手段三: 黑名单保护级别:描述: 黑名单是看来最简单的途径,不过同时也是最不可靠(有可能让用户绕过)。但在一些地方也是能起到作用的。优点:应用简单,快捷。缺点:不完全可靠,忘记验证的几率高。应用举例:动易SiteFactory系统中,黑名单的应用有如:过滤系统标签的输入,先将数据库中所有系统标签转换成别的代替符,标签解释完成后再转换成原字符。函数:PELabelEncode(string value),PELabelDecode(string value)。又如:系统的过滤函数RemoveXSS也是黑名单的一种利用。适当利用黑名单验证可以直接过滤掉大部份恶意代码。 防御手段四:白名单保护级别:描述: 白名单是开发人员定义的合法条件集合,集合以外的任何情况都被视为非法。白名单可能是允许的字符集合,合法文件名称列表,或者只是可以接受的数据类型列表。它与黑名单完全相反。由于它把忘记验证的几率降到最小,而且更容易实现,扩展性更强,所以白名单更加强大。开发人员在验证数据时应该始终使用白名单方法。优点:可靠性高,扩展性强。缺点:应用范围较小,通常应用于内容确定的地方。应用举例: 动易SiteFactory系统中白名单的应用有(只列出部份):数据类型转换:DataConverter 类 CDate CLng 等; 允许上传文件类型:m_FileExtArr = gif|png|jpeg|jpg|gif|bmp|fla|swf; 允许使用个别js:AllowString.xml 名件中的白名单; 允许文件接收参数类型:QueryStrings.config。 白名单一般应用在那些比较确定的输入类型。3.2 辅助防御方式除了使用上述技术验证输入外,还可以使用以下防御方式确保输入的正确性。防御手段一:过滤技术保护级别:描述: 过滤技术是通过特定过滤函数,把不允许的数据内容过滤掉,这种方法能确保数据的正确性,但同时也存在一些过滤不严和过滤太严的问题,总体来说,这也算是增强系统安全性的一种很有用的方法。优点:应用范围较广,有一定可靠性。缺点:函数设计考滤烦多,容易忘记需要过滤的内容。应用举例: 动易SiteFactory系统中,有多处使用过滤方法,这些过滤函数一般是放在命名空间PowerEasy.Framework.Common下的DataSecurity类和StringHelper类。如:FilterBadChar 函数、FilterSqlKeyword 函数 、RemoveXss 函数等应用。这些函数常用在内容过滤的地方,如RemoveXss函数主要用于跨站脚本的过滤。防御手段二:强制转换技术保护级别:描述:除了过滤外,有时也需要强制转换,以确保数据正确和程序的正确运行。如数据层中的强制转换就是一个很好的例子,程序运行到数据层,如果没有对数据进行强制转换,程序的出错将暴出系统错误信息或系统的其他机密信息,更重要的是没有了友好的错误提示。优点:是系统输入的最后一道防线,比较安全。缺点:容晚转换出错,要带出错处理过程。应用举例: 动易SiteFactory系统中,强制转换函数一般放在命名空间PowerEasy.Framework.Common下的DataConverter类里,如:CDate(object input)、CLng(object input)等,还有一些强制转换防出错的函数,在命名空间PowerEasy.SqlServerDal中的DBHelper类,如:ToNumber 函数、ToValidId 函数、CLng函数等。经过这双重保护,确保进入数据库的数据正确性。防御手段三:输出编码保护级别:描述:输出编码也是一种有效的防止HTML注入(XSS攻击等)的解决方案,具体技术下一章详细说明。优点:实现简单有效。缺点:只针对特定输出。防御手段四:数据库约束验证保护级别:描述: 数据库约束是为了保证数据的完整性而实现的一套机制,通过设计数据库约束,可以限制某些重要字段的数据输入,如: 非空约束,数据类型约束等。大大增强了系统数据的正确性。应用举例: 动易SiteFactory系统中,在数据库设计方面就考滤到了数据库约束验证,因此在数据设计时,就把数据类型都设计好,那些字段允许空,那些不允许都作好了规定。二、输出编码1.输出的种类 输出编码是转换输入数据为输出格式的过程序,输出格式不包含,或者只是有选择性的包含允许的特殊字符。输出的种类有:1)支持HTML代码的输出2)不支技HTML代码的输出3)URL的输出4)页面内容的输出(Keywords、Description等)5)js脚本的输出6)style样式的输出7)xml数据的输出8)服务控件的输出2.输出编码的必要性输出编码能有效地防止HTML注入(跨站脚本XSS攻击)等,也能确保输出内容的完整性和正确性。3.输出编码防御手段一:过滤保护级别:描述: 对于支持HTML代码的输出,输出前要确保代码中不含有跨站攻击脚本才能输出。通过编写过滤函数,进行强制过滤。优点:支持HTML,有交防止主流XSS攻击。缺点:有可能出错,函数设计难度大。应用举例: 动易SiteFactory系统中,目前而言,主要采用函数RemoveXss进行处理,由于RemoveXss并非十分完善,有待更好的过滤方案。但函数能防止目前主流的XSS攻击。所以在支持HTML代码的输出,一定要通过这个函数进行过滤(也可以输入到数据库前过滤)。 防御手段二:HTML编码保护级别:描述: 对于不支持HTML的输出,在输出到页面前要进行Server.HtmlEncode编码,部分服务器控件或者XSLT转换本身就支持Server.HtmlEncode编码,可不必进行重复编码。优点:非常可靠。缺点:不支持HTML输出。应用举例: 动易SiteFactory系统中,命名空间PowerEasy.Framework.Co
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号