作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
.NET、Java 和其他各种语言的高级数据库 API 通常提供称为准备语句和参数绑定(bind)的技术,而不是向数据库服务器发送纯文本命令。我想知道的是当您执行这样的语句时会发生什么:
SqlCommand cmd = new SqlCommand("GetMemberByID");
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param = new SqlParameter("@ID", memberID);
para.DbType = DbType.Integer;
cmd.Parameters.Add(param);
我知道这是最佳做法。 SQL注入(inject)攻击以这种方式被最小化。但是,当您执行这些语句时,幕后到底发生了什么?最终结果还是 SQL 安全字符串吗?如果不是,最后的结果是什么?这足以防止 SQL 注入(inject)攻击吗?
最佳答案
The MySQL manual page关于准备好的语句提供了大量信息(应该适用于任何其他 RDBMS)。
基本上,你的语句是提前解析和处理的,参数是单独发送的,而不是和SQL代码一起处理的。这消除了 SQL 注入(inject)攻击,因为甚至在设置参数之前就解析了 SQL。
关于c# - 参数绑定(bind) : What happens under the hood?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14934/
我是一名优秀的程序员,十分优秀!