public class Class1
{
public Class1()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
//拼接查询字符转
string sqlstr(string tbname)
{
string str="select * from "+tbname +" where id=@id";
return str;
}
//查询
public DataTable ss(int id)
{
string str=sqlstr("Mytab"); SqlParameter [] par=
{
new SqlParameter("@id",SqlDbType.Int)
};
par[0].Value=id;
DataTable dt= sqlhp.ex(str);
}}
请问如果我在页面中调用这个类是否有被注入的危险。
其中拼接字符串sqlstr(string tbname)
这个方法是私有的。
调用返回datatable的方法才是公共的!
根据用户的输入去构造sql语句
在没有预防措施的情况下,用户输入的值包含能改变你设置的sql语句的本意,即是sql注入
方法的访问权限和这个毫无关系,只看传入参数(一般是字符串)的处理
比如毫无预防的接受一个字符串,用户输入了两个减号(sql里的注释符号)
那你的sql,在这个字符串后面部分就全失效了
访问权限是你自己写程序的时候调用方法的问题,和sql注入没有半毛钱关系,注入的只需要构造合适的参数,影响的是最终的sql 语句,根本不关心方法调用.
public class Class1
{
public Class1()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
//拼接查询字符转
string sqlstr(string tbname)
{
string str="select * from "+tbname +" where id=@id";
return str;
}
//查询
public DataTable ss(int id)
{
string str=sqlstr("Mytab"); SqlParameter [] par=
{
new SqlParameter("@id",SqlDbType.Int)
};
par[0].Value=id;
DataTable dt= sqlhp.ex(str);
}}如果楼主只是提供这个类编译成DLL的话,如果在A。aspx要返回数据库中B表的数据,那么肯定是这么调用的
class1 c=new class1();
c. ss(1);
肯定是这么调用的在这个调用中
//拼接查询字符转
string sqlstr(string tbname)
{
string str="select * from "+tbname +" where id=@id";
return str;
}
拼接字符串 tbname 这个不是用户输入的而是在 //查询
public DataTable ss(int id)
{
string str=sqlstr("Mytab");。}这个方法中输入的固定参数
而楼主id 是通过@id参数输入的
用户输入的就只有id这个参数 所以 只要@id是参数化查询的话那么不纯在注入攻击方法,