gpt4 book ai didi

asp.net-mvc - 清理模板中用作布局的 Razor 语法

转载 作者:行者123 更新时间:2023-12-03 02:36:00 25 4
gpt4 key购买 nike

这是场景。目前,我们正在磁盘上存储 Multi-Tenancy CMS 系统的 Razor 模板。我们需要 Multi-Tenancy 系统中的管理员能够上传自己的网站模板(布局),但在这样做时,我们需要确保他们不会包含任何可能有害的 Razor 标记。

实际上,我们希望能够对可能包含在客户端模板中的任何 Razor 语法进行编码。

提案:
允许管理员使用安全模板系统上传带有批准标签的模板,例如 dotliquid .
上传时,首先将所有“@”符号替换为“@@”,以避免任何潜在的 Razor 语法。接下来,将批准的标签替换为适当的 Razor 标记,并将模板保存在数据库中。
加载页面将使用自定义的VirtualPathProvider - 超出了这个问题的范围......

问题

  1. 如果我只是将所有“@”符号替换为“@@”,是否会有效地“编码”模板中可能存在的所有 razor 标记?
  2. 如果模板包含合法的“@”符号(例如电子邮件地址或 Twitter 句柄),是否会有任何问题?我的初步测试表明双重转义是有效的。

更新

我的测试表明,用另一个“@”符号转义所有“@”符号将通过转义任何 Razor 语法来净化模板。但我很想听听对此主题有更深入了解的人的意见。

最佳答案

1) 编写一个函数来用 @ 注入(inject) razor 代码来防止 razor 注入(inject)是一种 hacky 解决方案。这就像在烧焦的布朗尼蛋糕上添加糖霜,使其味道更好。为什么不从一开始就阻止它呢?

相反,请在相应的 View 中尝试此操作:

<%=Html.Encode(feedback.Message)%>

或添加

<text> ... </text> 

在输入被处理之前。

2)如果你能保证这是一个合法的电子邮件地址,那就没问题了。但这很难保证。因此,我建议您使用 JavaScript 正则表达式进行简单而有效的电子邮件验证。这是一个 bool 函数,您可以将其放入 JavaScript 中来验证电子邮件(此正则表达式的成功率约为 95%):

function isValidEmailAddress(emailAddress) 
{
var emailPattern = new RegExp(/^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i);
return emailPattern.test(emailAddress);
}

关于asp.net-mvc - 清理模板中用作布局的 Razor 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17025915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com