模拟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;
}

本文到此结束。

相关推荐
界面开发小八哥39 分钟前
界面控件DevExpress WinForms v24.2——PDF Viewer功能升级
pdf·c#·界面控件·winform·devexpress·ui开发
天天打码2 小时前
Nuxt.js一个基于 Vue.js 的通用应用框架
前端·javascript·vue.js
Dnn012 小时前
前端读取本地项目中 public/a.xlsx 文件中的数据 vue3
前端·javascript·vue.js·读取xlsx数据
一块小砖头儿2 小时前
HTML向四周扩散背景
前端·javascript·html
CodeClimb2 小时前
【华为OD-B卷-打印文件 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
陳長生.2 小时前
JAVA EE(进阶)_HTML
javascript·css·java-ee·html
眼镜chen2 小时前
luckysheet的使用——17.将表格作为pdf下载到本地
前端·javascript·vue.js·chrome·pdf
开开心心就好2 小时前
便捷的Office批量转PDF工具
前端·python·pdf·ocr·硬件架构·音视频·材料工程
_龙小鱼_3 小时前
Vue2到Vue3迁移问题解析
前端·javascript·vue.js
招风的黑耳3 小时前
Axure跨页面交互:利用IFrame和JS实现父子页面菜单联动
javascript·交互·axure