java 防止sql xxs注入_【Java】防止SQL注入问题 解决XSS攻击 (个人梳理)

【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同意,违者必究

最后 写给读此文章的你

觉得文章对您有一定用处,请记得点赞评论支持博主,您的支持与互动是我最大的动力**

我是博桑 一个跨行程序员

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值