用户可以输入稍后将显示给其他用户的HTML.我正在使用的WYSIWYG插件从前端清理HTML.它删除了所有潜在的恶意标签(脚本,src,以"on"等开头的任何东西)我显然也需要在后端进行一些验证.
有谁知道C#的好解决方案?我一直看到这个http://roberto.open-lab.com/2010/03/04/a-html-sanitizer-for-c/,虽然我有点犹豫是否使用随机博客中的一些代码.有没有众所周知的插件?大多数人在这种情况下做了什么?
因此,我一直在使用带有白名单的html敏捷性构建C#html清理程序.它工作正常,除了这样的情况:
<img src="javascript:alert('BadStuff');" />
<img src="jav	ascript:alert('BadStuff');">
Run Code Online (Sandbox Code Playgroud)
我想要允许src属性,显然不是其中的恶意内容.我查找过的所有内容都推荐了一个标签及其属性的白名单.你会怎么处理这样的事情呢?我知道这在任何较新的浏览器中都不起作用,但我对安全性不是很熟悉,而且我确信攻击者可以做一些其他聪明的事情.
我有一个动态的SQL.运行大约需要4分钟.如果我改为使用SQL的输出并运行它,则需要大约20秒.为什么会出现差异?我知道在动态版本中构建SQL会花费一些时间,但我无法想象它的价格昂贵.
有人有主意吗?这两个查询应该是相同的,所以我怀疑它是查询计划缓存的奇怪之处,但实际上并没有多少想法.
编辑: 通过输出来澄清我的意思.
在动态SQL中,最后一行是
EXEC sp_executesql @myQuery,
N'@var1 INT,
@var2 INT,
@var2 INT',
@var1,
@var2,
@var3
Run Code Online (Sandbox Code Playgroud)
我获取了myQuery的值并将其放在自己的SQL文件中.那是在20秒运行,而使用执行的动态需要4分钟.
编辑2 我删除了参数.我得到了有趣的结果.动态SQL语句看到了性能提升.硬编码版本的性能受到了极大的打击.两者现在差不多了.
当用户单击列标题进行排序时,我想触发自己的事件.我不想让它排序.我一直在做研究,并没有看到一个很好的方法来做到这一点.
我可以绑定sort事件来做我自己的事情,但仍然会发生这种情况.我不想要这个.如果我禁用排序,那么sort事件永远不会触发,所以这也不起作用.
我可以禁用排序,然后尝试捕获标题上的点击事件,但我希望有更好的方法来做到这一点.有人有主意吗?
我需要在1-2秒内运行几个查询.我一直在努力优化它们,但是第一次调用它们需要大约20秒,在所有后续调用中大约需要1秒.这使我无法判断我所做的任何更改是否会加快查询速度,因为它总是在〜1秒后运行.我对SQL并不十分熟悉,但从我能够学到的东西来看,似乎有些东西就是缓存.我正在试图弄清楚如何防止这种情况,但似乎没有任何效果.从我在Google上发现的,人们一直在暗示
DBCC FREEPROCCACHE
Run Code Online (Sandbox Code Playgroud)
要么
OPTION(recompile)
Run Code Online (Sandbox Code Playgroud)
这些似乎都不起作用.当第一次使用~20时,每个查询仍在~1秒内运行.我只想确保我所做的更改正在带来改进,而不是改进来自缓存.还有其他一些技巧吗?
我有一个字符串
{! texthere }
Run Code Online (Sandbox Code Playgroud)
我希望在{!直到结束或你到达第一个}.所以,如果我有
{!text here} {!text here again} {!more text here.好家伙!
我希望["{{text here}","{{text here again}","{!more text here.哦,boy!"]
我认为这会奏效
{!*} ??
但上面的字符串会出现[{{{text here} {!text here again} {!more text here.哦,小男孩!"]
我仍然对正则表达式缺乏经验,所以我不明白为什么这不起作用.我认为它会匹配'{!' 然后是任意数量的字符,直到你得到一个可能不存在的括号(非贪婪).
我需要捕捉大括号之间的所有内容.所以,如果我有字符串:
{this} {is a} blah {test}
应该返回[this,is a,test].
我的代码看起来像这样:
var myString = "{this} {is a} blah {test}";
var parts = (/{([^{}]+)}/g).exec(myString);
// parts = [{this}, {is a}, {test}]
var parts = (/{([^{}]+)}/g).exec(myString);
// parts = [{this}, this]
Run Code Online (Sandbox Code Playgroud)
任何想法/帮助?
这就是我想要做的:
abstract class BaseAnimal;
class cat : BaseAnimal;
class dog : BaseAnimal;
var allAnimals = new list<BaseAnimal>();
foreach (var someVar in allVars)
{
var myAnimal = new BaseAnimal();
if (someVar == true)
{
myAnimal = new cat();
}
else
{
myAnimal = new dog();
}
/* do other things with myAnimal var */
allAnimals.add(myAnimal);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做这样的事情,或者我将不得不在每个IF语句中初始化变量然后复制其他东西/把它放在一个函数中并调用它两次?
c# ×3
javascript ×2
regex ×2
sql ×2
sql-server ×2
datatables ×1
html ×1
jquery ×1
security ×1
sorting ×1
xss ×1