登录界面常常会涉及到敏感关键字的注入

为了对应面试,再看一下

怎样防止注入,

可以过滤SQL需要参数中的敏感字符(忽略大小写)

public static string Split(string inputString) //防止SQL注入方法
{
inputString = inputString.Trim();
inputString = inputString.Replace("'","");
inputString = inputString.Replace(";--", "");
inputString = inputString.Replace("--", "");
inputString = inputString.Replace("=", "");
//and|exec|insert|select|delete|update|chr|mid|master|or|truncate|char|declare|join|count|*|%|union 等待关键字过滤
//不要忘记为你的用户名框,密码框设定 允许输入的最多字符长度 maxlength的值哦,这样他们就无法编写太长的东西来再次拼成第一次过滤掉的关键字 如 oorr一次replace过滤后又成了 or 喔。
inputString = inputString.Replace("and", "");
inputString = inputString.Replace("exec", "");
inputString = inputString.Replace("insert", "");
inputString = inputString.Replace("select", "");
inputString = inputString.Replace("delete", "");
inputString = inputString.Replace("update", "");
inputString = inputString.Replace("chr", "");
inputString = inputString.Replace("mid", "");
inputString = inputString.Replace("master", "");
inputString = inputString.Replace("or", "");
inputString = inputString.Replace("truncate", "");
inputString = inputString.Replace("char", "");
inputString = inputString.Replace("declare", "");
inputString = inputString.Replace("join", "");
inputString = inputString.Replace("count", "");
inputString = inputString.Replace("*", "");
inputString = inputString.Replace("%", "");
inputString = inputString.Replace("union", "");
return inputString;
}
        #region 过滤SQL,所有涉及到输入的用户直接输入的地方都要使用
/// <summary>
/// 过滤SQL,所有涉及到输入的用户直接输入的地方都要使用。
/// </summary>
/// <param name="text">输入内容</param>
/// <returns>过滤后的文本</returns>
public static string filterSQL(string text)
{
text = text.Replace("'", "''");
text = text.Replace("{", "{");
text = text.Replace("}", "}"); return text;
}
#endregion
        #region 过滤SQL,将SQL字符串里面的(')转换成(''),再在字符串的两边加上(')
/// <summary>
/// 将SQL字符串里面的(')转换成(''),再在字符串的两边加上(')。
/// </summary>
/// <param name="text">输入内容</param>
/// <returns>过滤后的文本</returns>
public static String GetQuotedString(String text)
{
return ("'" + filterSQL(text) + "'");
}
#endregion

防注入参数化过程实例:

        public static void Paramter(string getdataSql, string template, object parameters)
{
if (!string.IsNullOrEmpty(getdataSql))
{
CallContext.SetData(getdataSql, new KeyValuePair<string, object>(template, parameters));
}
} private long ExecuteScalar(string sql)
{
using (
IDbConnection dbConnection =
new SqlConnection(_unitOfWork.DbConnectionString))
{
try
{
dbConnection.Open();
var command = dbConnection.CreateCommand();
command.CommandText = sql;
command.CommandType = CommandType.Text;
object obj = command.ExecuteScalar();
long result = default(long);
if (null != obj)
{
result = Convert.ToInt64(obj);
}
return result;
}
finally
{
dbConnection.Close();
}
}
}

Sql server注入简单认识的更多相关文章

  1. SQL Server里简单参数化的痛苦

    在今天的文章里,我想谈下对于即席SQL语句(ad-hoc SQL statements),SQL Server使用的简单参数化(Simple Parameterization)的一些特性和副作用.首先 ...

  2. Sql server注入一些tips

    sql server环境测试: 几个特性: 1.sql server兼容性可以说是最差的. 举例: select x from y where id=1 字符串查询 select x from y w ...

  3. 第三篇——第二部分——第一文 SQL Server镜像简单介绍

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/DBA_Huangzj/article/details/26951563 原文出处:http://bl ...

  4. Perl/C#连接Oracle/SQL Server和简单操作

    连接数据库是一个很常见也很必须的操作.先将我用到的总结一下. 1. Perl 连接数据库 Perl 连接数据库的思路都是: 1)使用DBI模块: 2)创建数据库连接句柄dbh: 3)利用dbh创建语句 ...

  5. SQL Server注入

    1.利用错误消息提取信息 1.1 枚举当前表与列 --' 抛出错误:选择列表中的列 'users.id' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中. 发现表名为 'users',存 ...

  6. Hangfire实战(一)------Hangfire+SQL Server实现简单的任务调度

    Hangfire:一个开源的任务调度框架 开发环境:VS2017,SQL Server 2012,.NET Framework 4.5 项目类型:控制台应用程序 1.在vs的程序包控制台中为项目添加H ...

  7. Sql Server事务简单用法

    var conStr = "server=localhost;database=Data;user=sa;pwd=123456"; using (var connection = ...

  8. Sql Server Job 简单使用

    http://www.cnblogs.com/zerocc/p/3400529.html(转载) use msdb EXEC sp_add_job @job_name =   'tk_bakdata' ...

  9. springmvc+mybatis+sql server实现简单登录功能

    一.源码: 1.Users.java package com.login.entity; import java.io.Serializable; public class Users impleme ...

随机推荐

  1. CISC RISC架构

    参考: http://capacity.blog.163.com/blog/static/20866413120129261737102/ http://cs.stanford.edu/people/ ...

  2. python 实现Hadoop的partitioner和二次排序

    我们知道,一个典型的Map-Reduce过程包 括:Input->Map->Partition->Reduce->Output. Partition负责把Map任务输出的中间结 ...

  3. 图解TCP

  4. GO -- 一个经验

    加锁要在有用的的上下文再加锁, 不要加的范围多了, 否则被锁住.

  5. comgrid获取多选值

    var val = $('#cc').combobox('getValues');

  6. [Android开发教程]Android官网developer training中文版教程 - 1.1.1 创建一个Android项目

    本系列持续更新中.转载请注明来源. 前言:近期打算系统学习一下Android开发,发现Android官网上的developer training也是个非常好的学习资料,于是想到一边学习一边写一个中文版 ...

  7. ThreadLocal实现session中用户信息 的线程间共享

    转载自:http://blog.sina.com.cn/s/blog_4b5bc01101013gok.html ThreadLocal并不难理解,我总结的最简单的理解就是: ThreadLocal像 ...

  8. hello--GAN

    GAN系列学习(1)——前生今世 DCGAN.WGAN.WGAN-GP.LSGAN.BEGAN原理总结及对比 [Learning Notes]变分自编码器(Variational Auto-Encod ...

  9. [Webpack] Create Separate webpack Configs for Development and Production with webpack-merge

    The development and production modes in webpack optimize the output in different ways. In developmen ...

  10. C#基础视频教程4.1 如何编写简单的计算器

    要学会基本的窗体控件(button,textbox,label这种,以及他们的重要属性),每个控件的命名要符合规范(例如一般文本框都会重命名txtXXXXX,按钮都会重命名btnXXXXX)   为了 ...