模拟pdf运行js脚本触发xss攻击及防攻击

一、引入pdfbox依赖

XML 复制代码
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>3.0.0</version>
</dependency>

二、生成一个带js脚本的pdf文件

java 复制代码
//Creating PDF document object
PDDocument document = new PDDocument();

//Creating a blank page
PDPage blankPage = new PDPage();

//Adding the blank page to the document
document.addPage(blankPage);

String javaScript = "app.alert('欢迎关注cms.centyun.com');";

//Creating PDActionJavaScript object
PDActionJavaScript PDAjavascript = new PDActionJavaScript(javaScript);

//Embedding java script
document.getDocumentCatalog().setOpenAction(PDAjavascript);

//Saving the document
document.save("d:\\centyun.pdf");
System.out.println("PDF created");

//Closing the document
document.close();

三、在浏览器中打开pdf文件触发xss攻击

四、防止pdf的xss攻击

判断pdf文件中是否包含打开文档就运行的js脚本

java 复制代码
/**
 * 校验pdf文件是否包含打开文档就执行的js脚本
 **/
public static boolean containJavaScript(File file) {
    try {
        PDDocument document = Loader.loadPDF(file);
        PDDestinationOrAction openAction = document.getDocumentCatalog().getOpenAction();
        if (openAction != null) {
            String str = openAction.getCOSObject().toString().toLowerCase();
            return str.contains("javascript") || str.contains("cosname{js}");
        }
    } catch (Exception e) {
        log.error(e.getMessage(), e);
    }
    return false;
}

本文到此结束。

相关推荐
一拳不是超人14 小时前
Electron主窗口弹框被WebContentView遮挡?独立WebContentView弹框方案详解!
前端·javascript·electron
wuhen_n15 小时前
代码生成:从AST到render函数
前端·javascript·vue.js
Lee川15 小时前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
wuhen_n15 小时前
AST转换:静态提升与补丁标志
前端·javascript·vue.js
destinying15 小时前
性能优化之实战指南:让你的 Vue 应⽤跑得飞起
前端·javascript·vue.js
晴殇i16 小时前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
BER_c17 小时前
前端权限校验最佳实践:一个健壮的柯里化工具函数
前端·javascript
敲敲敲敲暴你脑袋17 小时前
写个添加注释的vscode插件
javascript·typescript·visual studio code
SuperEugene18 小时前
后台权限与菜单渲染:基于路由和后端返回的几种实现方式
前端·javascript·vue.js
csdn飘逸飘逸18 小时前
Autojs基础-全局函数与变量(globals)
javascript