前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nodejs 解决sql注入方案

nodejs 解决sql注入方案

作者头像
爱吃大橘
发布2022-12-27 14:42:54
7590
发布2022-12-27 14:42:54
举报
文章被收录于专栏:前端笔记薄前端笔记薄

什么是sql注入?

本文,希望能帮助到你来解决被sql注入攻击的问题,或者增进对sql注入的了解。

我拿到的客户端对象一般是const obj ={name:value}

假设我的语句是 ... where name = "${obj.name}"

如果此时,有个坏蛋鸡贼的发现你这样写。

那他完全可以传

代码语言:javascript
复制
const obj ={name:'666" or 1=1 or name="666'}

这时候,你的sql语句就会变成

代码语言:javascript
复制
 ... where name="666" or 1=1 or name="666"

因为 1=1 恒成立,所以他可以忽略name筛选条件,从而拿到数据。

因为鸡贼的坏人可以通过这样的方式拿到本不应该拿到数据,所以我们要防止sql注入

处理方式

sql注入主要方式是听过特殊符号来搞事情,那么我们不让他使用特殊符号就好了。在此基础上,再加上一个保底函数,来过滤意外进入的字符串,就很完美了。

要处理的特殊符号主要是 单引号'双引号",如果可以的话,空格也最好过滤掉。

我一般在使用客户端传入对象之前会校验一下格式和长度,之后会调用一个方法来处理客户端传入对象,来避免sql注入。(如下)

代码语言:javascript
复制
const obj = delPlainObjStringSign(object);

这里delPlainObjStringSign代码如下

代码语言:javascript
复制
function delPlainObjStringSign(obj) {
  if (!obj) {
    return obj;
  }
  if (typeof obj === 'object') {
    for (const key of Object.keys(obj)) {
      const value = obj[key];
      if (typeof value === 'string') {
        obj[key] = addslashes(value);
      } else if (typeof value === 'object') {
        obj[key] = delPlainObjStringSign(value);
      }
      console.log(obj[key]);
    }
  } else if (typeof obj === 'string') {
    return addslashes(obj);
  }
  return obj;
}
function addslashes(str) {
  let newS;
  try {
    if (JSON.parse(str)) {
      newS = str;
    } else {
      newS = (str + '').replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0');
    }
  } catch (error) {
    newS = (str + '').replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0');
  }
  return newS;
}



```

如果帮助到你了,一定不要忘记点赞~
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是sql注入?
  • 处理方式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档