我们与MVC(4,5)合作,我们的一些客户要求我们实施一些谷歌分析/ facebook像素代码。 我们不是搜索引擎优化的专家,所以我们只需要我们客户提供的JS代码,并在我们托管的网站上实现它(在快速查看和检查代码之后)。
现在我们想要自动化流程,所以我们想要创建一种CMS页面,管理员(我们的客户)可以将脚本块(他自己的分析代码)发布到我们的服务器上,以便在相关的情况下进行自动检查和实施观点(mvc .net)。
我想到了两种不同的方式: 1.使用txt / js的文件上传,并使用HttpPostedFileBase和BinaryReader将其解析为字符串。 2.从输入表单中获取脚本作为文本。
商业明智,我们更喜欢方法2.但这似乎更危险。 我将不得不绕过MVC的请求验证,以便让用户将“潜在危险代码”传递给控制器。
我还有另一种方法吗? 什么被认为是最终用户获得此类输入的最佳实践? 我确信之前已经完成了。
这是方法#1的代码:
[HttpPost]
public ActionResult AnalitycsCMS(HttpPostedFileBase scriptFile)
{
if (scriptFile != null && scriptFile.ContentLength > 0)
{
// Validate through List of valid extentions and type (strings)
bool isValidExtention = extentions.Any(item => scriptFile.FileName.EndsWith(item, StringComparison.OrdinalIgnoreCase));
bool isValidType = types.Any(item => scriptFile.ContentType.EndsWith(item, StringComparison.OrdinalIgnoreCase));
if (isValidExtention && isValidType)
{
// Read bytes from http input stream
BinaryReader br = new BinaryReader(scriptFile.InputStream);
byte[] data = br.ReadBytes(scriptFile.ContentLength);
string result = System.Text.Encoding.UTF8.GetString(data);
ViewBag.ScriptFile = result;
}
}
return View();
}
答案 0 :(得分:0)
我遇到过与我合作过的CMS类似的问题,客户总是最终添加JS代码,它会(100%)破坏您的代码,然后他们会针对您的系统提交错误报告。他们将添加会干扰您的库的库,代码片段将直接干扰代码,因此我强烈建议您避免这样做。
如果你真的需要,那么我会建议谷歌标记管理器作为已经提到的评论中的某人,或者确保将JS代码添加到命名空间并用其他东西包装以防止变量冲突。此外,在已加载库的文本输入区域附近添加一条消息,以便他们不会再次添加它们。