自学内容网 自学内容网

帆软通过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. 关闭对特殊关键字的禁用
    关闭对特殊关键字的禁用

原文地址:https://blog.csdn.net/m0_46434080/article/details/142513778

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!