OpenRASP Documents (Old)
  • 简介
  • 安装部署
    • 兼容性说明
    • 安装管理后台
    • 快速接入
      • PHP 服务器
      • Tomcat 服务器
      • JBoss 服务器
      • Wildfly 服务器
      • Resin 服务器
      • Jetty 服务器
      • Spring Boot 框架
      • WebLogic 服务器
      • WebSphere 服务器
      • 宝兰德BES服务器
      • 东方通TongWeb服务器
      • 中创InforSuiteAS服务器
      • 普元PAS服务器
    • 安装测试用例
    • 安装灰盒扫描工具
      • IAST 高级配置选项
    • SIEM 系统集成
      • Splunk
      • Logstash
    • 大规模部署
    • 卸载软件
  • 服务配置
    • 日志说明
    • 管理后台
    • 单机版本
    • 其他配置
  • 功能说明
    • 攻击检测能力说明
    • CVE 漏洞覆盖说明
    • 安全基线检查
    • 应用加固支持
    • 应用异常监控
    • 类库信息查询
    • HTML 响应修改
  • 插件开发
    • 开发插件
    • 接口说明
      • RASP 类接口
      • Context 类接口
    • 参数说明
    • 单元测试
    • 在线调试
    • 官方插件定制
  • 二次开发
    • 架构说明
      • Java 版本
      • PHP 版本
      • 管理后台
      • IAST 扫描器
      • Hook 函数列表
    • 从源代码编译
      • Java 版本
      • PHP 版本
      • 管理后台
    • 云控后台接口
    • 代码调试
    • 添加新的Hook点
    • 添加新的插件API
    • 提交你的代码
  • 性能测试
  • 版本变更
  • 关于我们
Powered by GitBook
On this page
Export as PDF
  1. 插件开发
  2. 接口说明

Context 类接口

Context 类包含当前请求信息和服务器信息

获取请求路径

绝对路径,不包含 Query String

context.path
// => '/my/article.jsp'

获取 Query String

返回URL参数

context.querystring
// => 'offset=10&size=10'

获取请求方法

字母为小写

context.method
// => 'get'

获取请求协议

context.protocol
// => 'https'

获取请求头

获取当前请求的 headers,其中key的名字均为小写。这个值可能为空,使用前需要判断,e.g if (context.header != null)

context.header
// => {
//   'user-agent': 'Chrome',
//   'content-type': 'application/json'
//   ...
// }

获取请求体

因受到服务器限制,插件系统不保证一定能够获取到请求体原始数据。在Java应用下面,只有应用读取了body,插件才能获取到。因此在 request hook 点是拿不到 body 的。

context.body
// => ArrayBuffer

获取请求 JSON

获取当前请求的 POST JSON 参数

context.json
// => {
//   'field': 'Value',
//   ...
// }

获取请求参数

对于 java 服务器,当用户已经获取过请求参数的情况下, 我们会返回 ServletRequest.getParameterMap() 的结果,也就是 Map<String, String[]>

// context.querystring = 'offset=10&size=10'
// context.body = 'filter=odd'
context.parameter
// => {
//   'offset': ['10'],
//   'size':   ['10'],
//   'filter': ['odd']
// }

获取请求来源地址

这个参数只是应用服务器看到的请求来源IP。如果是反向代理部署方式,你可能需要获取 X-Forwarded-For、X-Client-IP 等HTTP响应头数据

context.remoteAddr
// => '2.3.3.3'

获取服务器信息

当前服务器的属性,包括服务器类型、开发语言等等

context.server
// {
//    'name': 'Tomcat / JBoss / Jetty',
//    'version': '8',
//    'os': 'Linux',
//    'language': 'java / php' 
// }

若要判定是否为 Windows 系统,可使用 context.server.os.indexOf('Windows') == 0

获取Web根目录

对于java服务器,返回 webapps 目录;对于php服务器,返回 webroot

context.appBasePath
// => '/home/tomcat/webapps'

自定义实例

在编写单元测试时,若要同时模拟请求信息,可以通过自定义 Context 实例的方式来实现,e.g

var context = new Context()

// 自定义 method 参数信息
var context = new Context({
  getMethod: function() {
    return 'get'
  }
})

当然,除了请求方法以外,你可还可以自定义其他参数,

如果没有定义某个方法,这个方法将返回 undefined

var context = new Context({
  getPath: function(){},
  getQuerystring: function(){},
  getMethod: function(){},
  getProtocol: function(){},
  getHeader: function(){},
  getParameter: function(){},
  getBody: function(){},
  getRemoteAddr: function(){},
  getServer: function(){}
})
PreviousRASP 类接口Next参数说明

Last updated 11 days ago

仅返回请求体原始数据的前4KB,类型为

当用户还没有获取过任何参数, 我们会返回空对象, 这样做既可以保证用户在获取参数的时候不会产生乱码, 同时在插件中做用户参数匹配检测过程中也可以降低误报率。若要在 request hook 点获取到用户输入,请参考 文档,设置 request.param_encoding 参数。

ArrayBuffer
其他配置