当前位置: 首页 > article >正文

帆软通过JavaScript注入sql,实现数据动态查询

将sql语句设置为参数

  1. 新建数据库查询
    新建数据库查询
  2. 设置数据库查询的sql语句
    设置数据库查询的sql语句
  3. 添加控件
    添加控件

JavaScript实现sql注入

  1. 添加事件
    添加事件
  2. 编写JavaScript代码
//获取评价人id
var pjrid = this.options.form.getWidgetByName("id").getValue();

//显示评价人id
alert("评价人:" + pjrid);

//根据评价人id获取评价人的个人信息
var name = FR.remoteEvaluate('=sql("数据连接名","select * from 数据库名.表名 where id=\'' + pjrid + '\'",2,1)');
var class1 = FR.remoteEvaluate('=sql("数据连接名","select * from 数据库名.表名 where id=\'' + pjrid + '\'",3,1)');
var spe = FR.remoteEvaluate('=sql("数据连接名","select * from 数据库名.表名 where id=\'' + pjrid + '\'",4,1)');
var post = FR.remoteEvaluate('=sql("数据连接名","select * from 数据库名.表名 where id=\'' + pjrid + '\'",5,1)');
var num = FR.remoteEvaluate('=sql("数据连接名","select * from 数据库名.表名 where id=\'' + pjrid + '\'",6,1)');

//显示评价人信息
alert("姓名:" + name + "\n" + "身份:" + post + "\n" + "班组:" + class1 + "\n" +  "小组:" + num + "\n" +"专业:" + spe + "\n");

//str设置默认值,str值注入sql
var str="select * from 数据库名.表名 where id=0 ";

//将本人的个人信息筛掉
var beside="and id!="+pjrid;

switch (post) {
	case "组长":
		str = "select * from 数据库名.表名 where post='组长' "
		break;
	case "修理工":
		if (class1 == "长白班") {
			str = "select * from 数据库名.表名 where (post='修理工' or post='技术员') and spe=\'"+ spe+"\'"
		} else {
			str = "select * from 数据库名.表名 where post='修理工' and class=\'"+ class1+"\'and spe=\'"+spe+"\' and num=\'"+num+"\'"
		}
		break;
	case "技术员":
		str = "select * from 数据库名.表名 where (post='修理工' or post='技术员') and spe=\'"+ spe+"\'"
		break;
	default:
		alert("无评价权限")
}

//字段拼接
str=str+beside;

//将str注入到sql中
_g().getParameterContainer().getWidgetByName("sql").setValue(str);

FR.remoteEvaluate('=sql("jb","select * from 数据库名.表名 where id=\'' + pjrid + '\'",2,1)');

用远程公式 FR.remoteEvaluate('=公式')来执行函数

帆软中sql函数的用法

_g().getParameterContainer().getWidgetByName("sql").setValue(str);

1)首先用全局接口 _g() 获取报表对象。
2)因为要获取参数面板上控件,所以先要获取到参数面板,使用 _g() 的 getParameterContainer 方法获取参数面板对象,即:
_g().getParameterContainer
3)获取到参数面板后,再获取参数面板上的「文本框」控件,使用参数面板的 getWidgetByName 接口获取控件,即:
_g().getParameterContainer().getWidgetByName(“sql”)

帆软中的JS API

报表安全设置

若不进行安全设置,则会报错
安全提示

确定数据库安全级别可以使用sql注入,如果涉及一些机密数据,不建议使用此方法(避免遭受sql注入攻击)

  1. 打开报表平台管理
    打开报表平台管理
  2. 关闭脚本调用公式限制
    关闭脚本调用公式限制
  3. 关闭对特殊关键字的禁用
    关闭对特殊关键字的禁用

http://www.kler.cn/a/322331.html

相关文章:

  • [已解决]Tomcat 9.0.97控制台乱码
  • 网络安全领域的最新动态和漏洞信息
  • Linux的目录结构
  • 移动应用开发:使用Android Studio 实现登录页与注册页跳转
  • React解决保存less文件后会自动生成css文件的方法
  • 理解 Python 中的 __getitem__ 方法:在自定义类中启用索引和切片操作
  • [Linux#55][网络协议] 序列化与反序列化 | TcpCalculate为例
  • 微信小程序加载H5页面及与H5页面通信的实战教程
  • 代码随想录算法训练营 | 二叉树理论基础
  • 【python】函数的定义
  • 简历技能面试问答
  • MySQL InnoDB MVCC数据结构分析
  • 基于Hadoop的NBA球员大数据分析及可视化系统
  • Splashtop 在2024年 CybersecAsia 读者之选奖项评选中荣获新星奖
  • 【Vue】以RuoYi框架前端为例,ElementUI封装图片上传组件——将图片信息转成base64后提交到后端保存
  • opengauss使用遇到的问题,随时更新
  • android 页面布局(1)
  • 从git删除/上传新的文件-简单命令菜鸟教程
  • 常用并发设计模式精讲
  • Unity八股总结
  • java在开发中的总结
  • HalconDotNet的特征点检测和匹配方法
  • openinstall鸿蒙SDK再升级,功能全面支持HarmonyOS NEXT
  • 第五部分:3---信号的介绍、产生、保存、处理
  • Ks渲染做汽车动画吗?汽车本地渲染与云渲染成本分析
  • 【Android】布局优化—include,merge,ViewStub的使用方法