前端参数效验防止sql注入的方法

最近做完项目时,甲方对系统有要过安全等保三级的要求,这里针对我所编写的模块遇到的前端代码扫描出现的sql注入问题,给出部分解决方案。

错误示例

请求api时,参数未加效验;

 let _obj ={
      pageSize: pageSize,
      pageNum: pageNum,
      sort: sort,
      type:pharType,
    };
  return api.callApi("/navmark/sx_phar/list", _obj)
    .then((res) => {
      dataList.value =setPharImg(res.data);  data.cur_id="";
    });

此时扫描的错误为:
Web应用程序对用户输入数据的合法性没有进行判断和过滤,攻击者可以通过控制可控参数来构造不同的SQL语句来实现对数据库的任意操作。比如查询、删除,增加,修改数据等等,严重时还可以对操作系统执行命令。

正确操作

前端校验:

 let _obj ={
      pageSize: pageSize,
      pageNum: pageNum,
      sort: sort,
      type:pharType,
    };
     let flag =checkSqlsIn(_obj);if(flag){proxy.$modal.msgError("存在非法输入");return}
  return api.callApi("/navmark/sx_phar/list", _obj)
    .then((res) => {
      dataList.value =setPharImg(res.data);  data.cur_id="";
    });
  //SQL注入常见字符
var sqlKeyWords = "select ,union ,asc ,desc ,in ,like ,into ,exec ,from ";
sqlKeyWords += ",update ,insert ,delete ,count ,asc( ,char( ,chr( ,drop ,table ,truncat ";
sqlKeyWords += ",mid( ,abs( ,= ,-- ,<script ,/script ";
sqlKeyWords += ",where ,join ,create ,alter ,cast ,exists ,; , or , and ,order by ,group by ";
//分割成数组
var sqls = sqlKeyWords.split(",");
  
  function checkSqlsIn(_obj) {
  let lxdInput = JSON.stringify(_obj);
	let invalid = false;
	let chkInput = (lxdInput + "").toLowerCase();
	let pos = -1;
	for (let i = 0, n = sqls.length; i < n; i++) {
		pos = chkInput.indexOf(sqls[i]);
		if (pos != -1) {
			invalid = true;
			break;
		}
	}
	return invalid;
}

对提交的参数进行合法化效验,上面的校验只是匹配了部分sql常见字符。其他的自行补充
后端校验:后端使用不同语言的可能校验方式可能有所区别,大概思路类似,要么预编译sql语句,要么先校验参数合法性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Devil枫

发财小手鼓励一下作者大大

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值