防止注入应该过滤哪些东西?

tingxhcj 2007-04-01 01:39:59
有的人说只过滤单引号

有的人说要过滤很多东西

我不想用存储过程或者带参数执行

所以应该过滤哪些呢?
...全文
314 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
tingxhcj 2007-04-02
  • 打赏
  • 举报
回复
我知道 我不是说过了吗我非要用过滤 @_@ 过滤方式用起来更灵活(容易拼接) 查询太复杂了
cabee 2007-04-02
  • 打赏
  • 举报
回复
用参数的方法,什么都不用过滤。
shoutor 2007-04-02
  • 打赏
  • 举报
回复
逗号/分号/&/

还有就是访问权限控制,不能使用sa帐户,这样就不能执行系统的sp了
lingbo_wx 2007-04-02
  • 打赏
  • 举报
回复
SQL 语句用参数,限制好参数数据类型
在加一些特殊字符的过滤
伴老思源 2007-04-02
  • 打赏
  • 举报
回复
'
xp_cmdshell
zorou_fatal 2007-04-02
  • 打赏
  • 举报
回复
' % & @
一般认为是以上四个
tingxhcj 2007-04-02
  • 打赏
  • 举报
回复
我需要的规则是不会受到注入攻击就可以了 呵呵~ 这样的话要过滤的最小集合是???
zorou_fatal 2007-04-02
  • 打赏
  • 举报
回复
比较弱的规则里,需要过滤的敏感符号有 ' % & @
比较强的规则里,会把sql 的关键字都过滤掉,比如 select update delete declare 等
不过后一个强规则会让用户发表的部分内容丢失,需要看实际情况决定
tingxhcj 2007-04-02
  • 打赏
  • 举报
回复
知道怎么过滤 汗~ 要过滤哪些东西?

or,and '& + ,''可以了吗?
  • 打赏
  • 举报
回复
哦,我写的那一行代码也没有对 z 中包含的“]”号进行替换。其实我也不知道如何替换,一方面因为我不写这样的代码,另一方面这必须即时查相应数据库的SQL手册,手册上已经写的很清楚,跟“防注入”无关,如果能够注入,纯粹是写的代码根本不合SQL语法。
  • 打赏
  • 举报
回复
“过滤”什么时候可以牵强地接受呢?当你写

string sql = "select abc from def where 1=1 and "+x;

这种时候,也就是说设计者已经不顾语法,直接让客户端输入SQL语句(而不是常量)了。但是这种编程很少出现在正式的程序员的作品中。

“过滤”一词用语“放注入”有时候到了比较可笑的地步,很多人不知道如何注入、不知道如何写SQL,而去首先考虑如何过滤。不知道自己的目的地在哪里,而去准备行装,相当盲目。
  • 打赏
  • 举报
回复
哦,上面的y还是少了对两个替换符号的处理。察看一下SQL语法,它会告诉你当like运算中出现%符号的时候应该写为什么符号。


上面查询“标题”的语句凭什么不能包含'号呢?显然过滤是毫无道理的,应该正确地接受这些符号,并且按照相应的SQL语句的语法去进行正确的替换,而不是过滤。
  • 打赏
  • 举报
回复
如果你的代码写:

string sql=Text1.Text;

我看你根本无法过滤什么东西。因此你的答案纯粹要看你的sql语句怎么拼写。

例如如果仅用于拼写在sql语法中“常量”位置,例如:

string sql_1="select year([退休时间]) from [员工--中国部] where age >"+ x;
string sql_2="select [标题] from [文章,小说] where [标题] like '"+y+"%'";
string sql_3="select * from ["+z+"]";

这里,根本没有什么“过滤”概念,而是只要符合语法就行。为了符合语法,你要确保x确实是一个int类型的,所以应该写:
string x=int.parse(TextBox1.Text).ToString(); //除字符以外所有类型常量都应该用parse解析

同样为了符合语法,你要确保y是 nvarchar 并且其中的'号应该写为两个'号(这是SQL语法要求的),所以应该写:
string x=TextBox1.Text.Replace("'","''");

同样为了语法,只需要写:
string z=TextBox1.Text; //表名中可包含空格、特殊字符等,看SQL语法,不要轻信“过滤”之说

注意,当这种将数据拼在SQL的常量部位的写法总,纯粹是为了保证SQL语法正确,我看到“过滤”二字以及在这个上面做文章的文章就觉得很成问题。以上三种(其实还有更多种)其实都是从SQL语法出发的,属于你应该把SQL语法学好,不要轻信“过滤”之说。
海洋齐齐 2007-04-01
  • 打赏
  • 举报
回复
如何过滤..请指教
Cnaspnet 2007-04-01
  • 打赏
  • 举报
回复
or,and '& + ,''
phisy 2007-04-01
  • 打赏
  • 举报
回复
' % * 差不多啦..

62,039

社区成员

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

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

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

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