路径+DataRow+SqlParameters防止SQL注入
绝对路径:是从盘符开始的路径,形如
C:\windows\system32\cmd.exe
相对路径:是从当前路径开始的路径,假如当前路径为C:\windows
要描述上述路径,只需输入
system32\cmd.exe
实际上,严格的相对路径写法应为
.\system32\cmd.exe
其中,.表示当前路径,在通道情况下可以省略,只有在特殊的情况下不能省略。
Session 的用法是什么?
简单说就是保存用户信息的 给你打个比方吧,就比如你在百度这里问问题,当你首先登入的时候,你的名字等等就要写入到session; session("name")=request.form("name") 这样的话,当你从登入的首页转到它的子页,你的名字就还有效, 你有没有看见上面”我的提问,我的回答等等” 可以直接跳转,不用验证 否则的话,也就是你不用session,当你登入首页,再转到子页,你就等于没登入,你又要重新登入啦. 知道了吗, 也就是说,session是用来记录你的进程信息的,
SqlParameter 作用就是防止有特殊字符。一般情况下用于往存储过程传参
--其实我还没找到为啥防止特殊字符:比较起来好像是:sql字符串拼接,是直接拼接出来的,导致where后面恒成立
--通过SqlParamrter 是传入的值,不是直接拼接到sql语句上的,,有待考证
SqlParameter方法的原理呢:
就是参数化查询时,用户输入的参数仅仅作为参数而永远不会作为查询语句的一部分
什么意思呢?直白的讲,
参数化之后,用户输入的东西仅仅是SQL语句的参数,
在执行的时候加上 '' 它仅仅作为参数,不会变成SQL逻辑语句的一部分。
一般来说,在更新DataTable或是DataSet时,
如果不采用SqlParameter,那么当输入的Sql语句出现歧义时,
如字符串中含有单引号,程序就会发生错误,并且他人可以轻易地通过拼接Sql语句来进行注入攻击。
DataRow 是用来表示一个数据表的的数据行,所以,它不能单独new,
因为一行记录,需要有架构(架构就是描述这一行都有哪些列,分别是什么数据类型,甚至索引字段是哪个,有无约束等)。
所以DataRow有需要在有架构的情况下,才可以创建。
所以,你必须要先构造一个DataTable,然后才能在相应的DataTable上创建一行
示例代码:Columns 列
DataTable memTable = new DataTable( "tableName" ); memTable.Columns.Add( new DataColumn( "ID", typeof( int ) ) ); memTable.Columns.Add( new DataColumn( "Username", typeof( string ) ); memTable.Columns.Add( new DataColumn( "Password", typeof( Guid ) ); DataRow row = memTable.NewRow(); row[ "ID" ] = 1; row[ "Username" ] = "badbug"; row[ "Password" ] = Guid.NewGuid(); memTable.Rows.Add( row );
人各有命,上天注定,有人天生为王,有人落草为寇。脚下的路,如果不是你自己的选择,那么旅程的终点在哪,也没人知道。你会走到哪,会遇到谁,都不一定。