【问题标题】:Jsoup.clean, image src data:image/png lostJsoup.clean,图片src数据:图片/png丢失
【发布时间】:2023-03-14 01:46:02
【问题描述】:

字符串 "unsafe" 来自 contenteditable="true" div 到它作为图像从剪贴板粘贴的位置

// neeeds to be escaped. It is HTML5 valid
String unsafe = ""<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAABaklEQVQokZWSXYuCQBSG+xdCa5nRRZgzUlmDNlmCxSCjZg4Y9OkwMxf9Sn/aXrRERrC779U5L+fhfHBa9T/Vek3m8/kztm3bcRzXdTebjed50+m0AWy3W4RQXdcAgCcAIcyyTEpZlqVlWQ1ASnm9XpMksW3bsiwAAISQECKEuN/vlNL1et0ALpeLUkoIked5EAS+7xNCqqpSSlFKwzB838FxnCiKzuezEOJ4PJZlebvdOOdxHGOMPyytaRqEEGPMGOOcSymVUoyx5+gfrjQYDB5zn04nznlVVYyxyWRimuYHoN/vD4fD5XKZpmlRFGma7na7w+GQ5zlCaDQavQOu64ZhmCRJlmUYYwDAeDwOw7Aoiv1+v1gsHMdpAIQQSiml1Pd9wzC63a5hGL1eDyEURVEQBJ1OpwFQSuM49jxP13Vd1x+maZpfL2oAq9VqNpu1221N097O8lpdv/3Sj9X6YDaA1p/V6PBr6UPfrxpWT8DSD68AAAAASUVORK5CYII=" alt="">
"


org.jsoup.safety.Whitelist whitelist = Whitelist.relaxed();   

whitelist.addEnforcedAttribute("a", "rel", "nofollow"); 

String safe = Jsoup.clean(unsafe, whitelist);

//and safe becomes: "<img alt="">"
//entire src lost !?

注意:随机环绕 html 无效。无论如何,src 都会丢失。

【问题讨论】:

    标签: image jsoup src


    【解决方案1】:

    这里的基本问题是,如果快速查看这里的放松http://jsoup.org/apidocs/org/jsoup/safety/Whitelist.html#relaxed 假设只有标签,没有属性。没有查看源代码,但这里声称一些属性也在:How to make a Jsoup whitelist to accept certain attribute content。 并且 image 也已经在和 src 中了。

    导致我的 src 消失的问题是在

    preserveRelativeLinks
    

    设置为 false,表示放松,隐藏在 JSoup 代码中的某处 https://github.com/jhy/jsoup/issues/333

    --> 应该设置为真:

    System.out.println(Jsoup.clean("<img src='imgFile.png' />","http://www.somedomain.com", Whitelist.relaxed().preserveRelativeLinks(true)));
    

    【讨论】:

    • whitelist.addProtocols("img", "src", "http", "https", "data", "cid"); 也应该添加
    【解决方案2】:

    这是允许带有内联图像的基本文本的方法,例如src="data:image/png;base64,..."

    String safe = Jsoup.clean(unsafe, Whitelist.basic()
    .addTags("img")
    .addAttributes("img", "height", "src", "width")
    .addProtocols("img", "src", "http", "https", "data"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-09
      • 2017-01-19
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2012-07-22
      相关资源
      最近更新 更多