【问题标题】:Prevent external html to interfere entire page template防止外部html干扰整个页面模板
【发布时间】:2015-10-18 07:57:35
【问题描述】:

我的任务是探索博客并获取他们的最新帖子。现在我有了执行任务并将内容作为html 存储在数据库中的脚本。
除了模板推断外,一切正常。意味着如果内容 html 代码例如有一个额外的</div> 或忘记关闭标签,它将破坏我的整个页面。

问题:有没有办法将外部内容限制在一个部门,因此如果外部代码有问题,只是影响那个div框的模板而不是整个模板?

Link to correct template
Link to damaged template

提前致谢

【问题讨论】:

  • 您使用什么编程语言来获取此内容?
  • PHP,如果有问题,请告诉我将其添加到我的问题中,谢谢
  • 改为使用 RSS 或在重新提供之前解析和序列化 html。

标签: javascript html


【解决方案1】:

我们可以通过使用一个库来修复被废弃的格式错误的代码来简化这一点。

你可以这样做:

<?php
$content = '<div><p>I am a bad guy, and i am gonna put an additional div at the end.</p></div></div>';

$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD );
libxml_clear_errors();
$content = trim($dom->saveHTML());


echo $content;

它会返回:

<div><p>I am a bad guy, and i am gonna put an additional div at the end.</p></div>

【讨论】:

  • 感谢 lago,它可以正常工作,但它不能支持 utf8 编码,结果是这样的:…Ø®Ø§Ù„ÙØ§Ù† حمله روسیه به داعش
  • 是的,我建议你看看这个问题:stackoverflow.com/questions/11309194/… 只是为了不要在这里重复。
【解决方案2】:

据我所知,确保它不会影响页面上其他任何内容的唯一安全方法是对其进行 iframe。任何其他内容都将注入您的页面,因此除非您进行一些认真的解析和纠错,否则您将面临您提到的风险,例如未关闭的标签、覆盖 CSS 的样式标签、潜在的恶意 JS 等。其中一些是由诸如 JQuery 的 AJAX 函数之类的东西完成的,但如果您根本不能冒险,我会使用 iframe 来显示一个页面,该页面呈现您的抓取内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    相关资源
    最近更新 更多