软件流程规范---常见安全问题
2017-04-12 17:26
369 查看
1、SQL注入
SQL注入通常是由于直接将未可信的用户输入作为数据库查询的参数,用于数据库查询操作,从而引发数据库信息的泄露。SQL注入可导致未授权的访问敏感数据,更新或删除数据库信息等恶意操作。引发信息泄露/任意代码执行漏洞。
示例:
解决方案:
iBatis框架中的SQL语句尽量使用预编译#方式传参数,特别注意in语句和like语句写法,如必须使用$方式拼接SQL语句,则不应带入用户输入,或使用ESAPI中的SQLEscape方法过滤用户输入。
2、XSS
跨站点脚本发生于在动态生成的Web页面直接显示未可信(未严格验证)的外部输入,恶意用户可以利用该缺陷往动态页面中注入恶意脚本,当用户打开页面时,该恶意脚本将自动执行。注入的恶意脚本可以获取用户的帐号密码、改变用户设置、窃取cookies或往页面中插入一些恶意的内容。可导致恶意内容显示/任意脚本(代码)执行问题。
示例:
上传文件使用用户输入的文件名存储,若文件名中包含<script>alert("aaa")</script>则出现下图中的XSS问题
上传解析Excel时为进行过滤,导致用户输入反射到页面形成XSS问题
解决方案:
系统统一使用XssSpFilter进行用户输入过滤,需要配置web.xml中过滤器,文件:XssSpFilter.java,XssSpCommonsMultipartResolver.java。
同时在上传文件、解析Excel等位置使用用户输入存库时,通过Jsoup.clean(value, Whitelist.relaxed());方法进行过滤。
3、CSRF
用户以当前身份浏览到flash或者第三方网站时,JS/flash可以迫使用户浏览器向任意CGI发起请求,此请求包含用户身份标识,CGI如无限制则会以用户身份进行操作。
解决方案:
部署anti csrf token;限制访问的referer;不使用get方式提交数据;重要操作进行二次验证(验证码)等请求referrer验证;关键请求使用验证码。
4、路径可控制
利用用户的未可信的输入来控制访问服务器上的哪个文件,允许用户控制或访问不在用户访问路径上的文件。所访问文件的文件名(含路径)来源于外部输入(或部分受控制),通过控制用户访问路径上的“../”或“//”等特殊字符来访问其他目录下的文件(或添加新文件),可造成以下风险:读敏感数据文件、删除重要文件、DOS攻击。
示例:
由于有“/safe_path/”的限定,程序假定path就是可信的。但当恶意用户输入/safe_dir/../important.dat,则导致程序误删父目录下的文件important.dat。
解决方案:
写死路径、白名单路径,随机化文件名(如../);要检测../,对../ 进行替换转义;使用文件服务器;限制文件及目录权限。
5、日志欺骗
通过构造输入形成伪造的日志记录,达到隐藏痕迹的目的。
示例:
用户登录,日志记录登录状态
Username=Alex&Password=nopassword
19:30-Login failed for username:Alex
攻击者登录,日志被篡改
Username=Alex%0d%0a19%3a31-Login+successed+for+username%3a+Admin&Password=nopassword
19:30-Login failed for username:Alex
19:31-Login successed for username:Admin
解决方案:
日志记录时过滤换行及换行转义字符
SQL注入通常是由于直接将未可信的用户输入作为数据库查询的参数,用于数据库查询操作,从而引发数据库信息的泄露。SQL注入可导致未授权的访问敏感数据,更新或删除数据库信息等恶意操作。引发信息泄露/任意代码执行漏洞。
示例:
<select id="rpt_info_compliance.selectSqlModel" parameterClass="java.lang.String" resultClass="java.util.HashMap" remapResults="true" > $selectSqlSting$ </select> 其中$selectSqlSting$由用户输入带入 |
iBatis框架中的SQL语句尽量使用预编译#方式传参数,特别注意in语句和like语句写法,如必须使用$方式拼接SQL语句,则不应带入用户输入,或使用ESAPI中的SQLEscape方法过滤用户输入。
where h.dif_register_detail_inc_id in <iterate conjunction="," close=")" open="(" > <![CDATA[ #[]# ]]> </iterate> |
<isNotEmpty prepend="and" property="chnlId"> p.CHNL_ID like '%'||#chnlId#||'%' </isNotEmpty> |
跨站点脚本发生于在动态生成的Web页面直接显示未可信(未严格验证)的外部输入,恶意用户可以利用该缺陷往动态页面中注入恶意脚本,当用户打开页面时,该恶意脚本将自动执行。注入的恶意脚本可以获取用户的帐号密码、改变用户设置、窃取cookies或往页面中插入一些恶意的内容。可导致恶意内容显示/任意脚本(代码)执行问题。
示例:
上传文件使用用户输入的文件名存储,若文件名中包含<script>alert("aaa")</script>则出现下图中的XSS问题
上传解析Excel时为进行过滤,导致用户输入反射到页面形成XSS问题
解决方案:
系统统一使用XssSpFilter进行用户输入过滤,需要配置web.xml中过滤器,文件:XssSpFilter.java,XssSpCommonsMultipartResolver.java。
同时在上传文件、解析Excel等位置使用用户输入存库时,通过Jsoup.clean(value, Whitelist.relaxed());方法进行过滤。
3、CSRF
用户以当前身份浏览到flash或者第三方网站时,JS/flash可以迫使用户浏览器向任意CGI发起请求,此请求包含用户身份标识,CGI如无限制则会以用户身份进行操作。
解决方案:
部署anti csrf token;限制访问的referer;不使用get方式提交数据;重要操作进行二次验证(验证码)等请求referrer验证;关键请求使用验证码。
4、路径可控制
利用用户的未可信的输入来控制访问服务器上的哪个文件,允许用户控制或访问不在用户访问路径上的文件。所访问文件的文件名(含路径)来源于外部输入(或部分受控制),通过控制用户访问路径上的“../”或“//”等特殊字符来访问其他目录下的文件(或添加新文件),可造成以下风险:读敏感数据文件、删除重要文件、DOS攻击。
示例:
String path = getInputPath(); if (path.startsWith("/safe_dir/")){ File f = new File(path); f.delete() } |
解决方案:
写死路径、白名单路径,随机化文件名(如../);要检测../,对../ 进行替换转义;使用文件服务器;限制文件及目录权限。
5、日志欺骗
通过构造输入形成伪造的日志记录,达到隐藏痕迹的目的。
示例:
用户登录,日志记录登录状态
Username=Alex&Password=nopassword
19:30-Login failed for username:Alex
攻击者登录,日志被篡改
Username=Alex%0d%0a19%3a31-Login+successed+for+username%3a+Admin&Password=nopassword
19:30-Login failed for username:Alex
19:31-Login successed for username:Admin
解决方案:
日志记录时过滤换行及换行转义字符
相关文章推荐
- 《软件测试管理》第14章 软件测试常见问题——(三)测试流程常见问题
- Symbian 应用软件开发、测试与 S60 平台安全常见问题问答
- 【腾讯优测干货分享】如何降低App的待机内存(二)——规范测试流程及常见问题
- 《软件测试管理》第14章 软件测试常见问题——(三)测试流程常见问题
- 软件测试流程常见问题
- 《软件测试管理》第14章 软件测试常见问题——(三)测试流程常见问题
- 【腾讯优测干货分享】如何降低App的待机内存(二)——规范测试流程及常见问题
- 《软件测试管理》第14章 软件测试常见问题——(三)测试流程常见问题
- 《软件测试管理》第14章 软件测试常见问题——(三)测试流程常见问题
- 《软件测试管理》第14章 软件测试常见问题——(三)测试流程常见问题
- web软件常见安全问题(个人总结)
- 《软件测试管理》第14章 软件测试常见问题——(三)测试流程常见问题
- 软件项目管理常见问题分析
- 小型农田水利辅助设计软件使用常见问题
- Cookie的传递流程及安全问题
- 《软件测试管理》第14章 软件测试常见问题——(一)基础知识部分
- 软件项目管理常见问题分析
- Redhat RPM软件包使用常见问题
- 软件工程常见问题和软工控制重要性
- 软件漏洞---安全问题的根源