【Java】防止SQL注入问题 解决XSS攻击 (个人梳理)
【Java】防止SQL注入问题 解决XSS攻击 (个人梳理)
文章目录
前言
sql注入是什么,就是用户通过在表单中填写包含 SQL 关键字的数据来使数据库执行非常 规代码的过程。简单来说,就是客户端插入的数据做了代码才能干的 事情。这个问题的来源是,SQL 数据库的操作是通过 SQL 语句来执行的,而无论是执行代 码还是数据项都必须写在 SQL 语句之中,这就导致如果我们在数据项中加入了某些 SQL 语 句关键字(比如说 SELECT、DROP 等等),这些关键字就很可能在数据库写入或读取数据 时得到执行。
一、sql注入案例之一(拼接sql)
@Override
public List listIndexPageByCode(int pageNo, int pageSize, String code) {
String sql = "SELECT * FROM `自己的表名` where `code` = '"+code+"' LIMIT ? , ?";
logger.info("sql : " + sql);
logger.info("params : " + (pageNo - 1) * pageSize +" , " + pageSize);
return jdbcTemplate.query(sql, new Object[]{(pageNo - 1) * pageSize,pageSize}, new IndexMapper());
}
上图代码的问题就是 在与数据库操作时 给code拼接了具体的值 code=code,这样在查询语句的时候,如果插入 ‘or 1=1–,就会造成什么后果呢,就会造成 当你想查询一个数据的时候,由于 or前面的单引号造成一个闭合,or后面1=1条件恒成立,就造成了原本sql语句的where后判断永远为true,所以数据库会给你返回所有的数据。假设这不是一个搜索语句而是删除语句呢,通过这种简单的sql注入就能达到删除数据库所有数据的效果。无疑这样是很危险的。所以如何避免呢?
二、避免被sql注入
1.不要用拼接sql的形式
用下面这种形式,将 +code+ 用 ? 号代替
@Override
public List listIndexPageByCode(int pageNo, int pageSize, String code) {
String sql = "SELECT * FROM `t_myj_training_index` where `code` = ? LIMIT ? , ?";
logger.info("sql : " + sql);
logger.info("params : " + (pageNo - 1) * pageSize +" , " + pageSize);
return jdbcTemplate.query(sql, new Object[]{(sku,pageNo - 1) * pageSize,pageSize}, new IndexMapper());
}
为什么用 ?问号代替就不会发生sql注入了,因为? 相当于一个占位符,也就是说进行sql注入的时候,注入了这个 ? 号所占的位置里,并不能在原有的sql语句上加入恶意的sql语句,这样自然就防止了sql注入
XSS攻击
什么是xss攻击?
答:XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容
通俗点说 就是通过web注入垃圾弹窗代码到你的网页端或数据库端,让你每刷新一次页面就弹一次垃圾弹窗
那如何解决?
## 防止xss攻击 **XSS防御的总体思路是:对输入(和URL参数)进行过滤,对输出进行编码。** 我这里举一个最简单的例子 给前端代码加上 c:out标签
例如这种格式 因为c:out标签里有封装好的预编译功能,可以帮你过滤掉一部分xss攻击代码。
所以即使他注入进了你的web,也不会达成攻击者想达成的效果
总结
随着网络攻击的兴起,程序员不再是麻木的打字员,cv员,我们在实现逻辑功能时应尽可能考虑逻辑上的安全,与编码的规范,规避大部分漏洞的产生,要做一个有思想的人。
版权声明
本文刊载的所有内容,均由个人在工作学习中整理 用于个人的工作或学习的复习之用,为原创文章
本文章不得用于各种商业用途
不得侵犯本文及相关权利人的合法权利。
使用本文章进行转载或刊登以及其他涉及文章著作版权时,必须经过此csdn博客博主账号人lsb543284593同意,违者必究
最后 写给读此文章的你
觉得文章对您有一定用处,请记得点赞评论支持博主,您的支持与互动是我最大的动力**
我是博桑 一个跨行程序员