博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web安全编程
阅读量:6681 次
发布时间:2019-06-25

本文共 1393 字,大约阅读时间需要 4 分钟。

安全编程能够体现一个程序员是否合格,什么是安全编程,就是在开发阶段避免系统漏洞,根据乌云漏洞平台的统计,2014排行前10的安全问题如下:

SQL注入攻击:

最容易由程序员的编程疏忽产生的漏洞是SQL注入和XSS,SQL注入的危害严重的情况是泄漏整个数据库的信息,后果不堪设想,XSS的后果严重的情况使用户信息泄漏。以MyBatis为例如何防止SQL注入,如下一条查询语句:

SELECT * from answer a where a.username=#{username}

还可以换个方法写:

SELECT * from user u where u.username='${username}'
在MyBatis里对SQL的处理分为两种,一种是DynamicSqlSource,用于动态的拼接SQL,还有一种是RawSqlSource,静态的SQL(已经预编译)。

MyBatis对#{}的处理就是静态预编译,将SQL参数化,假设用户传的username我们没有过滤,直接用,如果输入的是“ vince' or '1' == '1 ”,预计编译的处理会对特定的字符做转义,数据库会去匹配整个字符串,但${}的处理则是拼接成一个新的SQL,拼接后的SQL如下:

SELECT * from user u where u.username='vince' or '1' == '1'

是不是结果就不是我们预期的了,严重的情况会使整个数据库被攻破,防止SQL注入的方法有很多,对用户输入的参数进行严格的校验同样也能避免此类问题,不过数据库在设计之初已经帮我们想好了处理方案,就是SQL的预编译,不仅提高执行效率,而且能够防止SQL注入。

跨站脚本攻击:

跨站脚本攻击也是一个开发人员引起的软件漏洞,开发人员没有对展示的文本进行转义处理,导致用户上传的恶意脚本在浏览器中执行了,这也叫代码注入,开发人员也可以通过严格的参数校验和过滤进行避免,也可以利用工具处理,例如Freemarker模板框架里的freemarker.template.utility.StringUtil.XMLEncNA(String),

用户输入的内容是 <script>alert('hel');</script>  处理后变成了 &lt;script&gt;alert('hel');&lt;/script&gt;  这样浏览器就不会执行这段脚本,但最终在浏览器上还是展示成 <script>alert('hel');</script>  ,试想一下,如果这里不是alert一个字符串,而是引入一个外部的JS文件,这个文件里的操作是获取用户的Cookie,Cookie里可能包含了某个网站的有效会话SessionID,然后将获取到的数据发到某个邮箱里,恶意的人可以用这个会话登录这个网站,后果可想而知了。

尤其是在有文件上传,用户输入框的地方,开发人员一定要有严格的防范意识,不要依赖客户端JS上的验证,任何用户输入的校验都要验证两次,至少服务器要校验一次。

有一个组织www.owasp.org/   在web安全方面做的很好,公益性的,贡献了很多资料值得我们开发人员学习。

其他安全注意事项:

还有很多容易引起安全漏洞的不良编码习惯,例如对密码的不重视,在软件中留SQL后门等等,当然不是所有漏洞都是开发人员引起的

你可能感兴趣的文章
软件工程结对作业01
查看>>
JZ-C-26
查看>>
Ng线性回归实现学习[转载]
查看>>
express的proxy实现前后端分离
查看>>
第一个 Metro程序(空白应用程序)
查看>>
面向对象----方法的重载
查看>>
linux降级重新安装gcc
查看>>
iOS网络编程之同步、异步、请求队列 2014-12-7
查看>>
链表的应用~~~~~~一元多项式的相加——原创
查看>>
阿花宝宝 Java基础笔记 之 多态
查看>>
HTML5学习之路——HTML 5 Web 存储
查看>>
enum和int、string的转换操作
查看>>
C# ACCESS数据库操作类
查看>>
详解vue通过NGINX部署在子目录或者二级目录实践
查看>>
括号匹配算法思想
查看>>
HDU 1043 Eight 【经典八数码输出路径/BFS/A*/康托展开】
查看>>
589. N叉树的前序遍历
查看>>
Java线程池使用和常用参数(待续)
查看>>
java 中 get post
查看>>
Hive学习之Locking
查看>>