.net # 检查 带有pdf xss

1.解决pdf含javasprct脚本动作,这里是验证pdf内部事件。相关pdf文件下载:
测试pdf文件

相关包 iTextSharp 5.5.13.4

iTextSharp

csharp 复制代码
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;

     private Boolean IsPdfSafe(Stream stream)
        {
            //  PdfReader reader = new PdfReader(stream);
            using (PdfReader reader = new PdfReader(stream))
            {

                for (int i = 1; i <= reader.NumberOfPages; i++)
                {
                    PdfDictionary pageDic = reader.GetPageN(i);
                    PdfObject obj = PdfReader.GetPdfObject(pageDic.Get(PdfName.ANNOTS));
                    if (obj == null || !obj.IsArray())
                        continue;

                    PdfArray annots = (PdfArray)obj;
                    for (int j = 0; j < annots.Size; j++)
                    {
                        PdfDictionary annot = annots.GetAsDict(j);
                        PdfName subtype = annot.GetAsName(PdfName.SUBTYPE);
                        if (PdfName.LINK.Equals(subtype))
                        {
                            PdfDictionary actionDict = annot.GetAsDict(PdfName.A);
                            if (actionDict != null)
                            {
                                PdfObject action = actionDict.Get(PdfName.S);
                                if (action != null)
                                {
                                	//可以判断具体哪些事件被拦截,目前已知事件GOTO,URI(连接跳转)
                                    Console.WriteLine("Action found: " + action.ToString());
                                    return false;
                                }
                            }
                        }
                    }
                }
            }

            return true;
        }

//应用的地方 写入缓存比较好,因为是非报错判断成功后可进行保存

csharp 复制代码
   using (MemoryStream memoryStream = new MemoryStream(buffer))
                {
                    if (!IsPdfSafe(memoryStream))
                    {
                      //TODO 返回错误信息

                    }
                }
复制代码
以上就是判断脚本的相关代码。

2.下面介绍一下读取pdf内容的脚本内容,仅做参考。

csharp 复制代码
 for (int i = 1; i <= reader.NumberOfPages; i++)
            {
                PdfDictionary pageDict = reader.GetPageN(i);
                PdfDictionary resourcesDict = pageDict.GetAsDict(PdfName.RESOURCES);
           //     PdfDictionary ACTION = resourcesDict.GetAsDict(PdfName.ACTION);
          //      PdfDictionary actionDict = javascriptDict.GetAsDict(PdfName.JAVASCRIPT);
                if (resourcesDict != null)
                {
                    PdfDictionary javascriptDict = resourcesDict.GetAsDict(PdfName.JS);

                    if (javascriptDict != null)
                    {
                        PdfDictionary actionDict = javascriptDict.GetAsDict(PdfName.JAVASCRIPT);

                        if (actionDict != null)
                        {
                            return false;
                        }
                    }
                }
            }

除了上面的iTextSharp ,还有itext7也是做pdf相关处理的。iTextSharp 已经停止更新两年了,如果要开发建议用itext7,上述代码进攻参考,因为版本不一样,调用接口也会不一样,开发时候请查相关api具体内容。

代码地址:https://github.com/itext/itextsharp

api地址:https://api.itextpdf.com/iText/dotnet/

3.如何制作带脚本pdf ,请参考下面博文。
https://blog.csdn.net/weixin_50464560/article/details/123841755?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172259109316800188565451%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=172259109316800188565451&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~rank_v31_ecpm-5-123841755-null-null.nonecase&utm_term=pdf%20xss&spm=1018.2226.3001.4450

相关推荐
唐青枫2 小时前
C#.NET Span 深入解析:零拷贝内存切片与高性能实战
c#·.net
min18112345614 小时前
PC流程图模板大全 中文定制化满足不同行业需求
架构·pdf·流程图
min18112345614 小时前
组织结构图导出PDF 高清无水印在线生成
网络·人工智能·架构·pdf·流程图·copilot
心.c15 小时前
如何在项目中减少 XSS 攻击
前端·xss
拓端研究室16 小时前
2026机器人产业前沿洞察报告:人形与特种机器人,认证、制造到消费 | 附280+份报告PDF、数据、可视化模板汇总下载
机器人·pdf·制造
开开心心_Every16 小时前
PDF密码移除工具,解除打印编辑复制权限免费
linux·运维·服务器·pdf·web3·ocr·共识算法
步步为营DotNet18 小时前
深入理解ASP.NET Core Middleware:构建高效Web应用的关键组件
中间件·asp.net·.net
我是唐青枫18 小时前
C#.NET SignalR 深入解析:实时通信、Hub 与连接管理实战
开发语言·c#·.net
波波00719 小时前
每日一题:什么是.NET中的线程池?
面试·.net
C_心欲无痕20 小时前
前端 PDF 渲染与下载实现
前端·pdf