我的网站上有一个允许HTML的输入表单,我正在尝试添加有关HTML标记使用的说明.我想要的文字
<strong>Look just like this line - so then know how to type it</strong>
Run Code Online (Sandbox Code Playgroud)
但到目前为止,我得到的是:
看起来就像这一行 - 所以然后知道如何键入它
如何显示标签以便人们知道要键入什么?
可能重复:
正则表达式以删除HTML标记
是否有一个表达式可以获取两个HTML标记之间的值?
鉴于这种:
<td class="played">0</td>
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个表达式,它将返回0,剥离<td>标签.
我正在保存用户提交的HTML(在数据库中).我必须防止Javascript注入攻击.我见过的最有害的是style ="expression(...)"中的脚本.
除此之外,有效用户内容的公平金额将包含特殊字符和XML结构,所以我想如果可能的话,避免白名单的做法.(列出每个允许的HTML元素和属性).
Javascript攻击字符串的示例是:
1)
"你好,<dog>元素有一个<script> alert("bad!")</ script>问题......"
2)
"嗨,这个<b style ="width:表达式(警告('坏!'))">狗</ b>是黑色的."
有没有办法防止这样的Javascript,并保持其余的完整?
到目前为止,我唯一的解决方案是使用正则表达式来删除某些模式.它解决了案例1,但不是案例2.
编辑: 对不起,忘了提及环境 - 它本质上是MS堆栈:
我希望阻塞点成为ASP.NET层 - 任何人都可以制作错误的HTTP请求.
编辑2:
感谢大家的链接.假设我可以定义我的列表(他的内容将包含许多数学和编程结构,因此白名单会非常烦人)我仍然有一个问题:
什么样的解析器允许我删除"坏"部分?坏部分可能是一个完整的元素,但那么属于这些属性的脚本呢.我无法删除<a hrefs> willy-nilly.
我使用以下Regular Expresion从字符串中删除html标记.它的工作原理除了我留下结束标签.如果我试图删除:<a href="blah">blah</a>它离开了<a/>.
我根本不知道正则表达式语法,并且通过这种方式摸索.拥有RegEx知识的人可以为我提供一个可行的模式.
这是我的代码:
string sPattern = @"<\/?!?(img|a)[^>]*>";
Regex rgx = new Regex(sPattern);
Match m = rgx.Match(sSummary);
string sResult = "";
if (m.Success)
sResult = rgx.Replace(sSummary, "", 1);
Run Code Online (Sandbox Code Playgroud)
我希望删除<a>和<img>标签的第一次出现.
有一个Node.js项目可以清理数据,还有一个用于JavaScript的OWASP库,用于处理清理以防止XSS.
我一直在对这些库进行基准测试,它们非常密集,也许是一种矫枉过正,我的应用程序不需要任何动态HTML(由用户提交,bbtags或者什么都不提供,根本不需要),所以为什么不这样做:
<"和" >"字符,不要替换它们或任何东西,只需禁用它们,如果用户提交这些字符,请向它们发出警告,禁用这些字符(客户端和服务器端验证)& => &" => "' => '/ => /这足以保护自己,正如我所说,我的应用程序不需要用户提交任何HTML,所以我根本不需要<和>标签.
感谢所有反馈,这就是我现在使用的:
var pattern = /<(.*)>/;
function hasHtmlTags(string) {
return pattern.test(string);
};
if (hasHtmlTags(userData)) {
// Do something?
} else {
// Create entity.
}
Run Code Online (Sandbox Code Playgroud)
因此,用户仍然可以使用他们的表情符号<等等,并且只有在找到<和>的组合时才会触发该函数.所以没有昂贵的正则表达式等,只需禁用<和>组合,我们应该没问题.
我的 Javascript 代码旨在获取一些不受信任的字符串变量并将其呈现在 DOM 中。它将被插入到格式良好的 HTML 中的已知点。当且仅当字符串不可能包含 HTML 元素时,它才会被插入。脚本执行是主要的担忧,但任何类型的可能被利用的注入都值得关注。
如果字符串看起来不安全,我就不能在 DOM 中呈现它。不需要对可能不安全的字符串进行消毒或做任何事情。事实上,我想避免使用库,而更喜欢不需要维护的简单检查。我还看到了向 DOM 添加文本节点的解决方案,但我只想说这对我正在做的事情不起作用。
我认为测试可能像“字符串是否包含 <”一样简单:
function isItSafe(text) { return text.indexOf('<') === -1; }
但也许这太天真了。特别是,当某些漏洞利用依赖于某个浏览器如何响应无效 HTML 时。可以在不使用“<”的情况下创建注入漏洞吗?如果是这样,您认为最低限度的检查需要是什么?