当前位置:首页 » 编程语言 » aspnet过滤sql注入
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

aspnet过滤sql注入

发布时间: 2022-08-19 09:36:36

A. c# 传参的方式能完全防止sql注入吗

结论:如果不能够重用执行计划,那么就有SQL注入的风险,因为SQL的语意有可能会变化,所表达的查询就可能变化。

首先,什么是注入漏洞攻击呢?所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。通常的解决方案有过滤敏感字符,比如说过滤掉or, and , select sql等关键字,通过参数化查询解决sql注入漏洞的实例。

所谓的参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入攻击 (SQL Injection) 的攻击手法的防御方式。Microsoft SQL Server 的参数格式是以 "@" 字符加上参数名称而成.

SQL 引擎的处理流程,大致为:收到指令 -> 编译SQL生成执行计划 ->选择执行计划 ->执行执行计划。
参数化查询主要做了这些事情:
1:参数过滤,对传入值进行了处理,按字符语义来处理。
2:执行计划重用

为参数化查询可以重用执行计划,并且如果重用执行计划的话,SQL所要表达的语义就不会变化,所以就可以防止SQL注入,如果不能重用执行计划,就有可能出现SQL注入,存储过程也是一样的道理,因为可以重用执行计划。

B. C#防止sql注入问题

采用了参数法给sql传递参数

SQL注入的原理你要先了解,因为以前SQL语句是用字符串拼接来组的.所以就有人想到如果我输入一个单引号来闭合原本程序里的单引号 然后在自己加些条件呢.

加入原本代码
String SQLStr = "select * from t_users where username='"+ txtusername.Text +"'";

如果你输入'or 1=1 -- 我们的SQLStr会变成什么呢

select * from t_users where username = '' or 1=1 --'
--后面属于sql的注释 所以都忽略了 即使后面有其他条件也忽略了

所以这条SQL执行总是有返回结果,至于其他的高级的试探性语句你可以搜索其他资料

====================================================================
采用参数法添加数据的话 就不会出现这样的问题.

程序会把'or 1=1 -- 当成一个整体的字符串 然后在两头加单引号 变成这样'\' or 1=1 --' 由于\属于转义字符 所以不会闭合前面的单引号

所以这样就防止了注入

//望采纳

C. C# winform 防止sql注入

唯一的解决办法是字符串过虑, 就算你写了存储过程,其内部原理他基本上是字符串的合并。根本无法从根本上解决SQL注入
唯一行之有效的办就只有一个 那就是 检查字符串里是否有单引号 如果有 把 字符串里的 单引号 全去掉. 如果 值类开 就是检查 or SQL 注入的精髓就是合理使用 单引号和 or 改变 sql 语意 只要你把 字符串中的 这两个东西 干掉就安全了 不过 字符过滤很费时间 尤其是 论坛一类的 需要提交文章的系统

D. 请问各位C#高手,该怎么防止SQL注入

采用了参数法给sql传递参数
sql注入的原理你要先了解,因为以前sql语句是用字符串拼接来组的.所以就有人想到如果我输入一个单引号来闭合原本程序里的单引号
然后在自己加些条件呢.
加入原本代码
string
sqlstr
=
"select
*
from
t_users
where
username='"+
txtusername.text
+"'";
如果你输入'or
1=1
--
我们的sqlstr会变成什么呢
select
*
from
t_users
where
username
=
''
or
1=1
--'
--后面属于sql的注释
所以都忽略了
即使后面有其他条件也忽略了
所以这条sql执行总是有返回结果,至于其他的高级的试探性语句你可以搜索其他资料
====================================================================
采用参数法添加数据的话
就不会出现这样的问题.
程序会把'or
1=1
--
当成一个整体的字符串
然后在两头加单引号
变成这样'\'
or
1=1
--'
由于\属于转义字符
所以不会闭合前面的单引号
所以这样就防止了注入
//望采纳

E. asp.net(C#)匹配正则表达,替换所有特殊符号,防止sql注入

防止sql注入,最简单的办法就是不要拼接sql,而是采用SqlParameter参数化形式,如果条件可能有可能没有,可以采用:
string sql = "select * from xx where 1=1";
if(true){
sql += " and id=@id";
command.Parameters.Add(new SqlParameter
}

如果非要拼接sql,那么对于数值型,拼接前判断下是否数值,
字符串类型拼接前进行str.Replace("'", "''");// 把一个单引号替换为两个单引号
就可以避免sql注入了

你用正则,效率低,而且成效也不见得好

F. C#中String.Format可以防止sql注入吗

不能,要防止sql注入有2种方案:

  1. 过滤替换掉所有的非法字符

  2. 使用参数化方式


G. 求助C#.NET防SQL注入式攻击方法

不要用拼接参数方式,使用parms赋值方式。
如:select * from table where username=:username
cmd.AddInParameter(":username", OracleType.VarChar, 50, "admin");

H. c#SQL防注入过滤函数疑问!

首先我们先了解为何会出现sql注入攻击
那是因为用户传入字符串
然后我们将某些字符串作为参数传给方法。
然后拼接字符串产生的。
而这些字符串,大多情况下由于存在特殊的符号比如‘单引号,或者一些其他的符号。
对于这些参数,我建议使用SqlParameter[]
而不是直接拼接字符串。
这样可以解决大部分的sql注入。

I. C#防止sql注入,在输入的时候 会超过三次的错误,提示不能再输入

先回答你的问题:声明一个整型变量作为计数器,每次输入之前先对计数器进行判断,如果计数器小于3则允许输入,并让计数器自增1,如果计数器大于3则提示不能再输入。

int i=0;
if(i<3)
{
//允许输入
i++;
}
else
{
//提示不能输入
}

回答了你的问题,我有一些别的问题要跟你探讨一下,我怀疑你对Sql注入的理解有偏差,所谓Sql注入并不是指大量向数据库中插入数据,而是指通过向数据库中注入查询语句导致数据损坏或者泄露。要防止Sql注入其实很简单,不要直接拼接查询语句,而是用Sql参数的方式传参。关于这方面的知识网上非常多,只要你感兴趣一定可以搞清楚。

PS:如果你理解的Sql注入是正确的话,那么以上限制输入次数的方式是根本无法解决问题的。