老鸟虚心请教!

flashlove2008 2011-09-30 01:59:00
model.title=Txt1.text();

这样的输入赋值 你过滤了吗???

虽然数据库操作采用带参数的形式,发现身边很多人都 认为用了带参数的形式了就不再对txt过滤了,绝对安全??


最后希望有人提供几个安全有关的类?(过滤类+转换类+验证类)

此贴希望大家把好的都贡献出来


还发现有些人在会员中心删除语句还是直接 where id=@id, 这样会把别人的数据也删除掉
...全文
981 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
flashlove2008 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sp1234 的回复:]

防治所谓“sql注入”是数据库编程的责任。如果你保证数据无需任何所谓的“过滤”而被正常地操作给数据库,那么也就不可能被SQL注入。比如说拼接t-sql命令字符串的时候(不管是应用程序还是存储过程内部),如果你不处理单引号,那么显然是无法保证将正确的操作数据。我们按照正常的方式操作数据,不需要过滤什么东西,相反地应该让不论什么文本都正常地操作给数据库,这就是数据库编程的目标。

至于各种数据会……
[/Quote]

SP讲述的很专业,非常感谢。
  • 打赏
  • 举报
回复
防治所谓“sql注入”是数据库编程的责任。如果你保证数据无需任何所谓的“过滤”而被正常地操作给数据库,那么也就不可能被SQL注入。比如说拼接t-sql命令字符串的时候(不管是应用程序还是存储过程内部),如果你不处理单引号,那么显然是无法保证将正确的操作数据。我们按照正常的方式操作数据,不需要过滤什么东西,相反地应该让不论什么文本都正常地操作给数据库,这就是数据库编程的目标。

至于各种数据会出现流程bug,或者与数据库本身无关的bug,那么你需要在业务流程设计上来负责。例如javascript脚本注入,这就不是我们操作数据库有错误的问题,就不要空洞地给数据库编程强加责任,而应该在你获取用户输入、或者最终产生html阶段的业务设计上去考虑你缺少的环节。
k767474055 2011-09-30
  • 打赏
  • 举报
回复
有道理,哈哈,学习了
flashlove2008 2011-09-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sp1234 的回复:]

引用 7 楼 qiujialongjjj 的回复:
不安全标签有哪些?

这个问题就比楼主的最起码实际很多了。至少这里引导人们去看数据将来的业务流程,比如说程序会直接把数据简单地贴在输出的html中,这就会为javascript注入带来一些手段。

但是这跟数据保存入数据库其实没有什么关系,也不要夸张成为什么凡是保存数据入库的人就要如何如何负责任。设计整个系统的处理流程的人会经过分析,……
[/Quote]

受教了 正因为不知道要过滤什么内容,才会有"过滤"一次的含糊一问
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qiujialongjjj 的回复:]
不安全标签有哪些?[/Quote]

这个问题就比楼主的最起码实际很多了。至少这里引导人们去看数据将来的业务流程,比如说程序会直接把数据简单地贴在输出的html中,这就会为javascript注入带来一些手段。

但是这跟数据保存入数据库其实没有什么关系,也不要夸张成为什么凡是保存数据入库的人就要如何如何负责任。设计整个系统的处理流程的人会经过分析,知道程序输出html时存在问题,而不是没头没脑地赖在保存数据到数据库这个环节上。
  • 打赏
  • 举报
回复
你怎么就知道数据库中永远不允许某个记录中的数值包含有引号、分号、<>符号、select这几个字母等等dene?

这个所谓“过滤”,是你不知道如何正确输入信息给数据库(而并不会出现所谓的什么“SQL注入”),还是真的所有软件处理的业务都不允许在内容有你所规定不许输入的内容?
风一样的大叔 2011-09-30
  • 打赏
  • 举报
回复
 /// <summary>
/// 过滤HTML中的不安全标签
/// </summary>
/// <param name="content"></param>
/// <returns></returns>
public static string RemoveUnsafeHtml(string content)
{
content = Regex.Replace(content, @"(\<|\s+)o([a-z]+\s?=)", "$1$2", RegexOptions.IgnoreCase);
content = Regex.Replace(content, @"(script|frame|form|meta|behavior|style)([\s|:|>])+", "$1.$2", RegexOptions.IgnoreCase);
return content;
}
不安全标签有哪些?
md5e 2011-09-30
  • 打赏
  • 举报
回复

/// <summary>
/// 移除Html标记
/// </summary>
/// <param name="content"></param>
/// <returns></returns>
public static string RemoveHtml(string content)
{
return Regex.Replace(content, @"<[^>]*>", string.Empty, RegexOptions.IgnoreCase);
}

/// <summary>
/// 过滤HTML中的不安全标签
/// </summary>
/// <param name="content"></param>
/// <returns></returns>
public static string RemoveUnsafeHtml(string content)
{
content = Regex.Replace(content, @"(\<|\s+)o([a-z]+\s?=)", "$1$2", RegexOptions.IgnoreCase);
content = Regex.Replace(content, @"(script|frame|form|meta|behavior|style)([\s|:|>])+", "$1.$2", RegexOptions.IgnoreCase);
return content;
}
/// <summary>
/// 替换sql语句中的有问题符号
/// </summary>
public static string ChkSQL(string str)
{
return (str == null) ? "" : str.Replace("'", "''");
}
CalvinR 2011-09-30
  • 打赏
  • 举报
回复
vrhero 2011-09-30
  • 打赏
  • 举报
回复
UI来说...ASP.NET一开始就有验证控件,很早就有Ajax.NET验证控件,还有很多五花八门的第三方输入验证控件...桌面程序做UI输入验证更容易,早几十年也一直就有...

分层的架构来说...BLL做参数验证也是很常规的规范...

但这些都跟数据库的逻辑没有关系...业务的归业务,SQL不必做多余的事...防止SQL注入并不是要限制用户行为,“where id=@id”更没什么不对, “这样会把别人的数据也删除掉”应该去检讨你的业务逻辑...

所以我只能认为你一直呆在某些不规范的小公司,两耳不闻天下事...甚至连MSDN都不看...
优倍网说杠杆 2011-09-30
  • 打赏
  • 举报
回复
id=id 应该是唯一的主键吧
不是主键 一般注册的时候 id也应该不重复才对啊

赋值的那个 在点击保存前可以写正则判断下的 只要过滤掉一些敏感字符就行啦
hztltgg 2011-09-30
  • 打赏
  • 举报
回复
不用过滤吧,安全是绝对的,数据到是可能乱七八糟的,输入什么就存进去什么呗。

where id=@id ,如果id来自querystring,那可能是有问题,如果是绑定自动生成的,那id一般来说是不能攥改的,不是自己生成的原始页面递交会有提示。
k767474055 2011-09-30
  • 打赏
  • 举报
回复
虚心等待中...

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧