Nokogiri:如何在输入中只允许 Facebook Pixel 并删除所有 HTML 和脚本?

Nokogiri: How to allow only the Facebook Pixel in the input and remove all HTML and scripts?

我有一个系统,用户可以在 HTML 中放置一些代码。出于安全原因,我们不允许放置 <script> 标签。

例如,要插入 Google 分析,我们获取用户 UA-CODE 并且我们的系统生成 Google 分析脚本。

但是插入Facebook Pixel有点复杂,因为这个软件有很多自定义选项,最终的代码总是不同的。

有没有办法在输入中只获取 Facebook Pixel 脚本?

代码是这样的:

<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', 'XXXXXXXXXXXXXXX');
fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=1026290407456147&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->

如果用户在此输入字段中放置一些额外的脚本,我想删除。

ruby -v: ruby 2.2.2p95
rails -v: Rails 4.2.1
nokogiri -v: Nokogiri (1.8.0)

检查任意 <script> 标签的内容确实不切实际;特别是当 "features are always being added"(所以你甚至没有明确定义的验收标准)。

我的建议是让服务器生成代码。如果 Facebook 添加新功能,您更新服务器代码(例如 gem 版本)以支持它。

This library,例如,提供 Facebook 像素的服务器端生成,给定选项的散列。