.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-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-5-123841755-null-null.nonecase&utm_term=pdf%20xss&spm=1018.2226.3001.4450

相关推荐
LostSpeed1 小时前
在福昕(pdf)阅读器中导航到上次阅读页面的方法
pdf
旭久1 小时前
SpringBoot的Thymeleaf做一个可自定义合并td的pdf表格
pdf·html·springboot
hackeroink5 小时前
【2024版】最新推荐好用的XSS漏洞扫描利用工具_xss扫描工具
前端·xss
数据的世界0111 小时前
.NET开发人员学习书籍推荐
学习·.net
paixiaoxin13 小时前
CV-OCR经典论文解读|An Empirical Study of Scaling Law for OCR/OCR 缩放定律的实证研究
人工智能·深度学习·机器学习·生成对抗网络·计算机视觉·ocr·.net
神色自若21 小时前
Net9为PDF文字替换,使用Spire.PDF版本10.12.4.1360
pdf
19004321 小时前
.NET重点
.net
m0_6632340121 小时前
在 .NET 5.0 运行 .NET 8.0 教程:使用 ASP.NET Core 创建 Web API
前端·asp.net·.net
机器懒得学习1 天前
解析交通事故报告:利用 PDF、AI 与数据标准化技术构建智能分析系统
pdf