level 11
宅术师老维
楼主
DLC还是没发售哇,刷新了下贴吧,也没什么新帖子,看见排第一的帖子说卡在SQL注入那了。那就顺便聊一下SQL注入吧。
首先说明,SQL注入我也只是懂原理哈,具体的操作其实很复杂,不太会。就工作来说,我其实是系统管理员这边的(对应游戏来说,就是在你破解主机的时候追踪你的那一方。当然,没到追踪这么牛B,但确实是进行防御的一方)。考虑到吧里很多人其实对计算机技术没有很深的了解,我尽量用简单易理解的比喻,说明一下SQL注入是怎么一回事,算是做个简单的科普。以后普通的吧友聊天聊到这方面也可以装装B。
首先,SQL本身是结构化查询语言的意思。这个东西是用来操作数据库的。数据库里存储了很多数据,我们要找某个数据的时候,当然不能一条一条的去看,就可以用SQL来写一段语句,帮你从庞大的数据库里找出你要的东西。
而SQL注入,就是通过一些方法,把某些经过精心编写SQL语句(通常自然是恶意的语句)绕过系统的一些限制放入到数据库里去执行,然后就可以得到你需要的(或者说额外的,正常情况无法得到的)数据或者权限。一般来说,这个方法就是通过用户提交的表单来达到目的。
举个简单例子(实际情况会很复杂哈,这个例子只是帮助理解)。
假设有一个网站,把用户名和密码放在了一个数据库的表里。用户登录的时候,在网站上的登录框里输入用户名和密码,网站就拿用户名和密码去数据库表里比对正确不正确。
假设用户输入用户名A,密码A,而查找的语句(我就不写SQL语句了,就用自然语言来说明)设计的是:【查找用户名是A而且密码是A】这个语句,这个语句其实是两部分,通过【而且】(AND,与运算)联系,先查找用户看是不是A,再查找密码看是不是A,如果两边都是正确,最后结果就是正确,就同意你登录;有任何一边错误,最后结果就是错误,就不同意你登录,显示一个:用户名和密码不正确。
现在有个黑客,他在用户名和密码里填入【B或者1等于1】,那么根据上面的查找语句,就变成了:【查找用户名是B或者1等于1而且密码是B或者1等于1】,其中【或者】(OR,或运算)和【而且】(AND,与运算)是运算符。这个查找语句实际上就变成了4部分,1.【用户名是B】2.【1等于1】3.【密码是B】4.【1等于1】。第一部分或者第二部分而且第三部分或者第四部分。按照SQL的运算顺序,最外面是【而且】(AND,与运算),【而且】前面是正确,后面也是正确,最后结果就正确,有一个错误,最后结果就错误。然后看【而且】前面是【用户名是B】【或者】【1等于1】。其中的【或者】(OR)是或运算,【或者】的前面和后面只要有1个是
正确的
,总的就是正确的。前面是【用户名是B】这是错误的(因为用户名实际是A),后面【1等于1】当然是正确的,所以总的【用户名是B】【或者】【1等于1】这部分就是正确的,密码部分同理,于是【而且】的前后都是正确的,所以最后的结果就是正确的,黑客实际上不知道用户名和密码,但是还是登入进去了。这种方法就是SQL注入。
这个方法实际上是利用了网站编写者的不严谨造成的。为了防范SQL注入,通常都会在需要填写表单的地方,对输入的内容进行一些限制,最基本的方法就是在输入的时候限制某些符号的使用,或者限制一定的长度,比如,说上面那个例子,网站规定:用户名和密码不能填写【或者】【而且】【等于】。你填了这些,网页就提示你:使用了非法字符。
有个探案美剧,叫《识骨寻踪》,里面主角们(警察这边的)所在的保存有犯罪数据库的实验室的网络是物理隔绝的,也就是说,它与外面根本不通网,你黑客再厉害,我不通网,你总进不来了吧?罪犯更绝,罪犯把SQL注入语句代码,刻在了受害人的骨头上,于是主角们在对受害人的骨头进行图像扫描的时候,就把SQL注入语句代码送入了犯罪数据库里。
好了,简单介绍了下SQL注入的基本原理,各位大神轻喷。
2017年03月31日 06点03分
1
首先说明,SQL注入我也只是懂原理哈,具体的操作其实很复杂,不太会。就工作来说,我其实是系统管理员这边的(对应游戏来说,就是在你破解主机的时候追踪你的那一方。当然,没到追踪这么牛B,但确实是进行防御的一方)。考虑到吧里很多人其实对计算机技术没有很深的了解,我尽量用简单易理解的比喻,说明一下SQL注入是怎么一回事,算是做个简单的科普。以后普通的吧友聊天聊到这方面也可以装装B。
首先,SQL本身是结构化查询语言的意思。这个东西是用来操作数据库的。数据库里存储了很多数据,我们要找某个数据的时候,当然不能一条一条的去看,就可以用SQL来写一段语句,帮你从庞大的数据库里找出你要的东西。
而SQL注入,就是通过一些方法,把某些经过精心编写SQL语句(通常自然是恶意的语句)绕过系统的一些限制放入到数据库里去执行,然后就可以得到你需要的(或者说额外的,正常情况无法得到的)数据或者权限。一般来说,这个方法就是通过用户提交的表单来达到目的。
举个简单例子(实际情况会很复杂哈,这个例子只是帮助理解)。
假设有一个网站,把用户名和密码放在了一个数据库的表里。用户登录的时候,在网站上的登录框里输入用户名和密码,网站就拿用户名和密码去数据库表里比对正确不正确。
假设用户输入用户名A,密码A,而查找的语句(我就不写SQL语句了,就用自然语言来说明)设计的是:【查找用户名是A而且密码是A】这个语句,这个语句其实是两部分,通过【而且】(AND,与运算)联系,先查找用户看是不是A,再查找密码看是不是A,如果两边都是正确,最后结果就是正确,就同意你登录;有任何一边错误,最后结果就是错误,就不同意你登录,显示一个:用户名和密码不正确。
现在有个黑客,他在用户名和密码里填入【B或者1等于1】,那么根据上面的查找语句,就变成了:【查找用户名是B或者1等于1而且密码是B或者1等于1】,其中【或者】(OR,或运算)和【而且】(AND,与运算)是运算符。这个查找语句实际上就变成了4部分,1.【用户名是B】2.【1等于1】3.【密码是B】4.【1等于1】。第一部分或者第二部分而且第三部分或者第四部分。按照SQL的运算顺序,最外面是【而且】(AND,与运算),【而且】前面是正确,后面也是正确,最后结果就正确,有一个错误,最后结果就错误。然后看【而且】前面是【用户名是B】【或者】【1等于1】。其中的【或者】(OR)是或运算,【或者】的前面和后面只要有1个是
正确的
,总的就是正确的。前面是【用户名是B】这是错误的(因为用户名实际是A),后面【1等于1】当然是正确的,所以总的【用户名是B】【或者】【1等于1】这部分就是正确的,密码部分同理,于是【而且】的前后都是正确的,所以最后的结果就是正确的,黑客实际上不知道用户名和密码,但是还是登入进去了。这种方法就是SQL注入。
这个方法实际上是利用了网站编写者的不严谨造成的。为了防范SQL注入,通常都会在需要填写表单的地方,对输入的内容进行一些限制,最基本的方法就是在输入的时候限制某些符号的使用,或者限制一定的长度,比如,说上面那个例子,网站规定:用户名和密码不能填写【或者】【而且】【等于】。你填了这些,网页就提示你:使用了非法字符。
有个探案美剧,叫《识骨寻踪》,里面主角们(警察这边的)所在的保存有犯罪数据库的实验室的网络是物理隔绝的,也就是说,它与外面根本不通网,你黑客再厉害,我不通网,你总进不来了吧?罪犯更绝,罪犯把SQL注入语句代码,刻在了受害人的骨头上,于是主角们在对受害人的骨头进行图像扫描的时候,就把SQL注入语句代码送入了犯罪数据库里。
好了,简单介绍了下SQL注入的基本原理,各位大神轻喷。