参数化防SQL注入
private void AddStudent(){
string strName =txtName.Text.Trim();
string strPwd = txtPwd.Text.Trim();
string strSql ="insert into Student (name,pwd) values(@name,@pwd) ";
SqlConnection conn = new SqlConnection(" server=.;database=TestDB;uid=sa;pwd=pwd123 ");
SqlCommand cmd = new SqlCommand(strSql,conn);
//参数数组 对应Sql语句中的参数
SqlParameter [] paras ={
new SqlParameter("@name",strName),
new SqlParameter("@pwd",strPwd)
};
cmd.Parameters.AddRange(paras);
conn.Open();
int result = Convert.ToInt32(cmd.ExecuteScalar());
conn.Close();
if(result>0){
...
}eles{
...
}
}
上面的代码是访问SQL Server数据库的代码。如果本文中提到的数据分别在Access、MySQL、Oracle数据库,那么对应的参数化SQL语句及参数分别如下:
| 数据库 | Access | MySQL | Oracle |
| SQL语句 | select * from UserInfo where sex=? and age>? | select * from UserInfo where sex=?sex and age>?age | select * from UserInfo where sex=:sex and age>:age |
| 参数 | OleDbParameter | MySqlParameter | OracleParameter |
| 实例化参数 | OleDbParameter p=new OleDbParameter(“?”, OleDbType. Boolean); | MySqlParameter p=new MySqlParameter(“?sex”, MySqlDbType.Bit); | OracleParameter p=new OracleParameter(“:sex”, OracleType.Byte); |
| 赋值 | p.Value=true; | p.Value=1; | p.Value=1; |
通过上面的实例代码我们可以看出尽管SQL语句大体相似,但是在不同数据库的特点,可能参数化SQL语句不同,例如在Access中参数化SQL语句是在参数直接以“?”作为参数名,在SQL Server中是参数有“@”前缀,在MySQL中是参数有“?”前缀,在Oracle中参数以“:”为前缀。
注意:因为在Access中参数名都是“?”,所以给参数赋值一定要按照列顺序赋值,否则就有可能执行出错。
以下是 oracle数据库中:
public DataTable CheckUser(string userName, string pwd)
{ OracleConnection conn = new OracleConnection(connStr);
DataTable dt = new DataTable();
string sql = string.Format(@"SELECT
GUID, USERNAME, PWD,
CREATEDATE,NICKNAME
FROM F_USERS WHERE status =1 and USERNAME =:USERNAME and PWD =:PWD");
try
{ //参数数组 对应Sql语句中的参数
OracleParameter[] paras ={
new OracleParameter(":USERNAME",userName),
new OracleParameter(":PWD",pwd)
}; OracleCommand cmd = new OracleCommand(sql, conn);
cmd.Parameters.AddRange(paras);
conn.Open();
OracleDataAdapter oda = new OracleDataAdapter(cmd);
oda.Fill(dt);
return dt;
}
catch
{
return dt;
}
finally
{
conn.Close();
}
}
参数化防SQL注入的更多相关文章
- 防SQL注入:生成参数化的通用分页查询语句
原文:防SQL注入:生成参数化的通用分页查询语句 前些时间看了玉开兄的“如此高效通用的分页存储过程是带有sql注入漏洞的”这篇文章,才突然想起某个项目也是使用了累似的通用分页存储过程.使用这种通用的存 ...
- C#防SQL注入代码的实现方法
对于网站的安全性,是每个网站开发者和运营者最关心的问题.网站一旦出现漏洞,那势必将造成很大的损失.为了提高网站的安全性,首先网站要防注入,最重要的是服务器的安全设施要做到位. 下面说下网站防注入的几点 ...
- .Net防sql注入的方法总结
#防sql注入的常用方法: 1.服务端对前端传过来的参数值进行类型验证: 2.服务端执行sql,使用参数化传值,而不要使用sql字符串拼接: 3.服务端对前端传过来的数据进行sql关键词过来与检测: ...
- 【荐】PDO防 SQL注入攻击 原理分析 以及 使用PDO的注意事项
我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下几个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特 ...
- C#语言Winform防SQl注入做用户登录的例子
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- PHP防SQL注入不要再用addslashes和mysql_real_escape_string
PHP防SQL注入不要再用addslashes和mysql_real_escape_string了,有需要的朋友可以参考下. 博主热衷各种互联网技术,常啰嗦,时常伴有强迫症,常更新,觉得文章对你有帮助 ...
- mysql之数据库连接的方法封装及防sql注入
一.定义数据库和表 create database animal; CREATE TABLE `pet` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name ...
- nginx服务器防sql注入/溢出攻击/spam及禁User-agents
本文章给大家介绍一个nginx服务器防sql注入/溢出攻击/spam及禁User-agents实例代码,有需要了解的朋友可进入参考. 在配置文件添加如下字段即可 代码如下 复制代码 server { ...
- php防sql注入、xss
php自带的几个防止sql注入的函数http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2013/0318/12234.html addslashe ...
随机推荐
- Limit CPUID MAX
Limit CPUID MAX to 3.是指出现在英特尔平台的BIOS设置选项.很多主板也显示成CPUID maximum value limit选项.中文意义是:限制执行CPUID指令返回数值大于 ...
- AtCoder Regular Contest 092
AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...
- @RequestMapping映射请求,@PathVariable,@RequestParam,@RequestHeader的使用
1.@RequestMapping Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求,在控制器的类定义及方法定义处都可标注. @RequestMa ...
- Linux 更改默认安装路径
一.rpm -qal |grep mysql 二.除了根据软件包来找文件位置之外,最常用的就是通过find查找某个关键字比如mysql所有包含mysql服务的文件路径 find / -name unr ...
- Memcached set 命令
Memcached set 命令用于将 value(数据值) 存储在指定的 key(键) 中. 如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用. 语法: s ...
- ZC_RemoteThread
1.Z_WinMain.cpp #include <windows.h> #include "resource.h" #include "Z_RemoteFu ...
- html笔记(1)
hgroup 代替div figure figcaption 独立流内容 替代 dl mark 替代 span
- python函数语法学习
Python函数 定义函数 在Python中,定义一个函数用def语句,一次写出函数名.括号中的参数和冒号:,函数返回使用return语句. def myDef(x): if x >= 0: r ...
- HDU 3037 组合数、lucas,逆元
题目链接 题目大意,N颗树上取不超过M个果子,求总方案个数模P的值,P是质数且不超过10w,N,M不超过1e9: 在这里树是被认为不同的,也就是将k(0<=k<=M)个小球放入N个不同的盒 ...
- css中实现显示和隐藏(转)
CSS中的display和visibility 在平时的开发过程中,总是会遇到一些文字在特定的场景下显示或者隐藏来达到我们想要的效果,css中display和visibility语法,他们都 ...