帆软通过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.rhkb.cn/news/434409.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式之策略设计模式

一、状态设计模式概念 策略模式(Strategy) 是一种行为设计模式, 它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。 适用场景 当你想使用对象中各种不同的算法变体, …

Vue|插件

在 Vue.js 中,插件是用来扩展 Vue 功能的一种方式,能够帮助开发者扩展和复用功能。通过合理使用插件,可以提高代码的组织性和可维护性 目录 如何使用插件?插件的定义创建及使用插件插件的参数插件的扩展 总结 如何使用插件? 插件的定义 插…

iOS OC 底层原理之 category、load、initialize

文章目录 category底层结构runtime 执行 category 底层原理添加成员变量 load调用形式系统调用形式的内部原理源码实现逻辑 initialize调用形式源码核心函数(由上到下依次调用)如果分类实现了 initialize category 底层结构 本质是结构体。struct _cat…

Goweb---Gorm操作数据库(二)

Gorm允许用户自己自定义钩子操作,使用这些钩子操作,可以在增删改查操作前进行相关的操作和检验,它会在创建、更新、查询、删除时自动被调用。如果任何回调返回错误,GORM 将停止后续的操作并回滚事务。 自定义钩子函数 package ma…

爬虫入门 Selenium使用

爬虫入门 & Selenium使用 特别声明📢:本教程只用于教学,大家在使用爬虫过程中需要遵守相关法律法规,否则后果自负!!! 项目代码:https://github.com/ziyifast/ziyifast-code_inst…

828华为云征文 | 解锁高效项目管理,Zentao在华为云Flexusx容器化部署与应用指南

前言 在当今快速迭代的商业环境中,高效且灵活的项目管理成为企业竞争力的关键。华为云Flexusx实例,以其灵活的vCPU内存配比、热变配功能及按需计费模式,为项目管理软件如Zentao的部署提供了理想平台。Flexusx实例采用按需计费的灵活定价模式&…

IDEA 高版本创建 Spring Boot 项目选不到 java 8

一、场景分析 现在高版本的 IDEA,创建 Spring Boot 项目时常常会选不到 Java 8: 直接使用 Java 17 新建项目,又会报错: Selected version of Java 17 is not supported by the project SDK 1.8. Either choose a lower version o…

Go Mail设置指南:如何提升发送邮件效率?

Go Mail使用技巧与配置教程?如何用Go Mail实现发信? 随着工作负载的增加,如何高效地发送和管理邮件成为了许多职场人士面临的挑战。AokSend将为您提供一份详细的Go Mail设置指南,帮助您提升发送邮件的效率,让您的邮件…

数据结构与算法——Java实现 24.中缀表达式转后缀

目录 中缀表达式转后缀表达式 引言 思路 代码 正因为我有能力跨越,考验才会降临 —— 24.9.28 中缀表达式转后缀表达式 引言 Java中的编译器会将我们编写代码中的中缀表达式转化为后缀表达式,然后编译好输出程序 思路 遍历中缀表达式,如果遇…

C++学习9.28

1> 创建一个新项目,将默认提供的程序都注释上意义 por QT core gui #QT表示引入的类库 core:核心库例如IO操作在该库中 gui:图形化显示库 #如果要使用其他类库中的相关函数,就需要调用相关类库后,才能加以使用greaterThan(Q…

Postgresql源码(136)syscache/relcache 缓存及失效机制

相关 《Postgresql源码(45)SysCache内存结构与搜索流程分析》 0 总结速查 syscache:缓存系统表的行。通用数据结构,可以缓存一切数据(hash dlist)。可以分别缓存单行和多行查询。 syscache使用CatCache数…

SpringBoot3.X配置OAuth

背景 之前在学习OAuth2时,我就有一个疑惑,OAuth2中有太多的配置、服务类都标注了Deprecated,如下: 显然这些写法已经过时了,那么官方推荐的最新写法是什么样的呢?当时我没有深究这些,我以为我放…

Ansible-template模块动态生成特定文件

文章目录 一、Jinja2介绍什么是主要特性安装基本用法进阶特性总结 Jinja2与Ansible关系1. 模板引擎2. Ansible 的依赖3. 变量和模板4. 动态生成配置5. 社区和生态系统总结 二、Ansible如何使用Jinja2使用template模块Jinja2文件中使用判断和循环Jinja2文件中使用判断语法 Jinja…

onload_tcpdump命令抓包报错Onload stack [7,] already has tcpdump process

最近碰到Onload 不支持同时运行多个 tcpdump 进程的报错,实际上使用了ps查询当时系统中并没有tcpdump相关进程存在。需要重启服务器本机使用onload加速的相关进程后才能使用onload_tcpdump正常抓包,很奇怪,之前确实没遇到这样的问题&#xff…

C++友元和运算符重载

目录 一. 友元 friend 1.1 概念 1.2 友元函数 1.3 友元类 1.4 友元成员函数 二. 运算符重载 2.1 概念 2.2成员函数运算符重载 2.3 成员函数运算符重载 2.4 特殊运算符重载 2.4.1 赋值运算符重载 2.4.2 类型转换运算符重载 2.5 注意事项 三、std::string 字符串类…

MyBatis-Plus分页查询

在实际开发中,对于大量数据的查询,可以通过分页查询的方式来减少查询量和提高查询效率。在 MyBatis-Plus 中,分页查询可以通过使用 Page 对象和 IService 接口提供的分页方法来实现。MyBatis-Plus 的分页插件 PaginationInnerInterceptor 提供…

基于Spring框架的分层解耦详解

博客主页:誓则盟约系列专栏:Java Web关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Java Web 三层架构: Java Web可以大致被分为三层架构:…

Win11 安装 PostgreSQL 数据库,两种方式详细步骤

文章目录 一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的安装包托管在 EDB上)3. 选择版本点击下载按钮 安装1. 管理员打开安装包2. 选择安装目录3. 勾选安装项4. 设置数据存储目录5. 设置管理员密码…

【C++报错已解决】std::ios_base::floatfield

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

YOLOv8改进,YOLOv8主干网络替换为GhostNetV3(2024年华为提出的轻量化架构,全网首发),助力涨点

摘要 GhostNetV3 是由华为诺亚方舟实验室的团队发布的,于2024年4月发布。 摘要:紧凑型神经网络专为边缘设备上的应用设计,具备更快的推理速度,但性能相对适中。然而,紧凑型模型的训练策略目前借鉴自传统模型,这忽略了它们在模型容量上的差异,可能阻碍紧凑型模型的性能…