霍尔果斯哇唧唧哇哇 2023-04-10 15:49 采纳率: 0%
浏览 14

关于#web安全#的问题:nodejs+mysql以下代码是否可以彻底防止sql注入呢

nodejs+mysql
以下代码是否可以彻底防止sql注入呢?如果不能,请详细说明!

var CHARS_GLOBAL_REGEXP = /[\0\b\t\n\r\x1a\"\'\\]/g; 
var CHARS_ESCAPE_MAP    = {
    '\0'   : '\\0',
    '\b'   : '\\b',
    '\t'   : '\\t',
    '\n'   : '\\n',
    '\r'   : '\\r',
    '\x1a' : '\\Z',
    '"'    : '\\"',
    '\''   : '\\\'',
    '\\'   : '\\\\'
  };
function escapeString(val) {
    var chunkIndex = CHARS_GLOBAL_REGEXP.lastIndex = 0;
    var escapedVal = '';
    var match;
  
    while ((match = CHARS_GLOBAL_REGEXP.exec(val))) {
      escapedVal += val.slice(chunkIndex, match.index) + CHARS_ESCAPE_MAP[match[0]];
      chunkIndex = CHARS_GLOBAL_REGEXP.lastIndex;
    }
  
    if (chunkIndex === 0) {
      return "'" + val + "'";
    }
  
    if (chunkIndex < val.length) {
      return "'" + escapedVal + val.slice(chunkIndex) + "'";
    }
  
    return "'" + escapedVal + "'";
  }

  let sql = 'select * from admin where user ='+escapeString(浏览器传入的参数值);
  var res = this.query(sql);

  • 写回答

2条回答 默认 最新

  • 瞬间的未来式 2023-04-10 16:06
    关注

    仍存在SQL注入漏洞。主要问题在于它使用了字符串拼接的方式来构造SQL查询语句,而没有使用参数化查询。这使得攻击者可以通过构造特定的输入来改变查询的含义,从而执行恶意的操作。

    例如,假设浏览器传入的参数值为 '; DROP TABLE admin;',则最终构造的SQL查询语句为:

    select * from admin where user = ''; DROP TABLE admin;''
    
    
    
    评论

报告相同问题?

问题事件

  • 修改了问题 4月10日
  • 创建了问题 4月10日

悬赏问题

  • ¥15 asp写PC网站开通了微信支付,扫码付款不能跳转
  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 关于#c语言#的问题:我在vscode和codeblocks中编写c语言时出现打不开源文件该怎么办
  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥500 服务器搭建cisco AnyConnect vpn
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊