广告
返回顶部
首页 > 资讯 > 精选 >json数据sql注入怎么办
  • 307
分享到

json数据sql注入怎么办

2024-04-02 19:04:59 307人浏览 独家记忆
摘要

JSON数据sql注入的解决方法:使用jackson实现对json数据的处理,添加依赖如下:<dependency><groupId>com.fasterxml.jackson.core</groupId>

json数据sql注入怎么办

JSON数据sql注入的解决方法:

使用jackson实现对json数据的处理,添加依赖如下:

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>2.8.10</version>

</dependency>

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-core</artifactId>

<version>2.8.10</version>

<dependency>

使用jackson的属性来获取数据,例如:

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.Jsonnode;

import com.fasterxml.jackson.databind.ObjectMapper;@Component

public class sqlValidateFilter implements Filter {private static final Logger logger = LoggerFactory.getLogger(sqlValidateFilter.class);

@Value("${spring.profiles.active}")

private String activeProfile;@Override

public void init(FilterConfig filterConfig) throws ServletException {

}@Override

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

throws IOException, ServletException {

RequestWrapper wrapper = new RequestWrapper((httpservletRequest) request);

HttpServletResponse resp = (HttpServletResponse) response;

if (existsInvalidsqlTokenInRequest(wrapper)) {

resp.setStatus(417);

String contentType = "test".equals(activeProfile) ? "text/html;charset=GBK" : "text/html;charset=UTF-8";

response.setContentType(contentType);

response.getOutputStream().write("您发送请求中的参数中含有非法字符".getBytes());

return;

}chain.doFilter(wrapper, resp); }

private boolean existsInvalidsqlTokenInRequest(RequestWrapper request) throws JsonProcessingException, IOException {

for (String value : getParameterValuesBehindUrl(request)) {

if (findInvalidsqlToken(value)) {

return true;

}

}

for (String value : getParameterValuesInBody(request)) {

if (findInvalidsqlToken(value)) {

return true;

}

}

return false;

}

private List<String> getParameterValuesBehindUrl(RequestWrapper request) {

List<String> results = new ArrayList<String>();

Enumeration<String> params = request.getParameterNames();

while (params.hasMoreElements()) {

String name = params.nextElement().toString();

String[] values = request.getParameterValues(name);

for (String value : values) {

results.add(value);

}

}

return results;

}

private List<String> getParameterValuesInBody(RequestWrapper request)

throws JsonProcessingException, IOException {

List<String> results = new ArrayList<String>();

String body = request.getBody();

if (StringUtils.isNotBlank(body)) {

ObjectMapper mapper = new ObjectMapper();

JsonNode node = mapper.readTree(body);

results.addAll(parseJsonNode(node));

}

return results;

}

private List<String> parseJsonNode(JsonNode node) {

List<String> results = new ArrayList<String>();

switch (node.getNodeType()) {

case ARRAY:

for (int index = 0; index < node.size(); index++) {

results.addAll(parseJsonNode(node.get(index)));

}

break;

case OBJECT:

Iterator<Map.Entry<String, JsonNode>> fields = node.fields();

while (fields.hasNext()) {

results.addAll(parseJsonNode(fields.next().getValue()));

}

break;

default:

results.add(node.toString());

break;

}

return results;

}

private boolean findInvalidsqlToken(String value) {

String lowerCaseValue = value.toLowerCase(Locale.ENGLISH);

String sqlTokens = "'|and|exec|execute|insert|select|delete|count|drop|*|chr|mid|master|truncate|"

+ "char|declare|net user|xp_cmdshell|;|+|like'|and|exec|execute|insert|create"

+ "table|from|grant|use|group_concat|column_name|"

+ "infORMation_schema.columns|table_schema|uNIOn|where|order|by|*|//|--|#|";

for (String token : sqlTokens.split("\\|")) {

if (lowerCaseValue.contains(token)) {

logger.info("dataValue=" + lowerCaseValue + ", marchValue=" + token);

return true;

}

}

return false;

}@Override

public void destroy() {

// TODO Auto-generated method stub}

}

--结束END--

本文标题: json数据sql注入怎么办

本文链接: https://www.lsjlt.com/news/115375.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • json数据sql注入怎么办
    json数据sql注入的解决方法:使用jackson实现对json数据的处理,添加依赖如下:<dependency><groupId>com.fasterxml.jackson.core</groupId>...
    99+
    2022-10-08
  • sql注入怎么删除表数据
    sql注入删除表数据的方法:例如直接在网站登录页面账号输入框中填写'123'这种格式,接着密码框填写'456'; DROP TABLE user这种形式,最后在数据库中解析成完整语句如下:SELECT * FROM userLogi...
    99+
    2022-10-04
  • sql注入过滤逗号怎么办
    sql注入过滤逗号的解决方法:通过case when then绕过,例如:mysql> select * from lbcms_admin where a...
    99+
    2022-10-21
  • sql中in的参数怎么注入
    sql中in的参数注入示例:为where in的每一个参数生成一个参数,代码如下:using (SqlConnection conn = new SqlConnection(connectionString)){conn.Open...
    99+
    2022-10-06
  • sql注入如何修改数据
    sql注入修改数据的语法格式为:updata 表名 set 字段1=值1,字段2=值2...where条件示例://将user用户表中id为1的name字段修改成linupdata user set name='lin' wher...
    99+
    2022-10-13
  • 怎么防止SQL注入
    这篇文章主要介绍了怎么防止SQL注入,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。SQL注入即是指web应用程序对用户输入数据的合法性没有判...
    99+
    2022-10-18
  • 怎么防御SQL注入
    这篇文章主要介绍怎么防御SQL注入,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  许多网站程序在编写时,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段...
    99+
    2022-10-18
  • SQL注入怎么解决
    小编给大家分享一下SQL注入怎么解决,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言SQL注入即是指web应用程序对用户输入数...
    99+
    2022-10-18
  • 怎么进行sql注入
    这篇文章主要介绍了怎么进行sql注入,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入...
    99+
    2022-10-18
  • SQL注入怎么防范
    这篇文章主要介绍“SQL注入怎么防范”,在日常操作中,相信很多人在SQL注入怎么防范问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL注入怎么防范”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!一:什么是...
    99+
    2023-06-21
  • 怎么实现SQL注入
    今天就跟大家聊聊有关怎么实现SQL注入,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是SQL注入SQL注入是指通过构建特殊的输入篡改原来的SQL语句达到攻击者所需的操作。Sql ...
    99+
    2023-06-15
  • sql注入怎么插入语句
    sql注入中插入语句的语法格式为:Insert into 表名(字段1,字段2,字段3,...)values (值1,值2,值3...);示例://插入一个user用户表,字段有id、name,值为1和linInsert into 'use...
    99+
    2022-10-09
  • 分页参数怎么防止SQL注入
    分页参数防止SQL注入的方法:对任何输入信息都必须进行参数过滤,php实例:$this->load->library ( 'pagination' );$config ['base_url'] = site_url () . '/guest...
    99+
    2022-10-23
  • sql参数化怎么实现防注入
    sql参数化实现防注入的示例:构造execute参数列表,让模块自动去拼装查询字符串,可防止SQL注入现象发生,代码:# 安全方式find_name = input("请输入您要查询商品的名称:")# 构造参数列表params = [fin...
    99+
    2022-10-05
  • 怎么将json导入redis数据库
    将json导入redis数据库的示例:使用python3将json对象导入redis数据库。json对象var someexpert={id:10000realname: ‘expert-a’organization:’BUAA’}var ...
    99+
    2022-10-14
  • SQL注入之盲注怎么实现
    这篇文章主要介绍“SQL注入之盲注怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SQL注入之盲注怎么实现”文章能帮助大家解决问题。sql注入——盲注1.回顾...
    99+
    2022-10-19
  • golang怎么防止sql注入
    在Go语言中,可以使用参数化查询或预编译语句来防止SQL注入。1. 参数化查询:使用占位符来代替实际的参数值,然后将参数值作为参数传...
    99+
    2023-09-17
    golang sql
  • ibatis怎么防止sql注入
    ibatis防止sql注入的方法:使用#写法采用预编译方式,将转义交给数据库,则不会出现注入问题,例如://mysql环境select * from test where school_name like conca&#...
    99+
    2022-10-10
  • hibernate怎么防止sql注入
    hibernate防止sql注入的方法:使用named parameter方法(在查询字符串中使用:),例如:usernameString//前台输入的用户名passwordString//前台输入的密码//hql语句String quer...
    99+
    2022-10-20
  • 怎么实现SQL注入Trick
    这期内容当中小编将会给大家带来有关怎么实现SQL注入Trick,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。between and 操作符代替比较符操作符 BETWEEN...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作