分享
 
 
 

初级教程之SQL Injection(SQL注入攻击)

王朝asp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

因为目前SQL注入是非常热门而且技术门槛较低的攻击手段,并且非常实用,轻则可以拿到网站的一些帐号,比如拿到某个电影网站的黄金会员的帐号;重则利用其网站楼多入侵整个服务器等等。

这里打算作为一个专题讲解SQL及其注入。其中对于SQL不太明白的地方希望大家自己查资料。这个帖子将长期更新。。。

一,SQL纵览

SQL(Structured Query Language)语言是一种结构化查询语言。SQL语言中完成核心功能的共有9个关键词:SELECT(数据查询)、CREAT、DROP、ALTER(数据定义)、INSERT、UPDATA、DELETE(数据操纵)、GRANT、REVOKE(数据控制)。

1,数据定义部分

(1)创建基本表

creat table Employee (

Eno char(6) not null unique,

Ename char(20) unique

Esex char(2)

Eage int

Edept char(10)

Espe char(20)

)

该语句创建了一个名为Employee的数据表,共有六列,分别为字符型(长度为6,非空,唯一)的雇员号Eno,字符型(长度为20,唯一)的雇员号姓名Ename,字符型(长度为2)的雇员性别,整型的雇员年龄,字符型(长度为10)的雇员部门,字符型(长度为20)的雇员特长.

(2)删除基本表

DROP TABLE Employee

(3)更改基本表

ALTER TABLE Employee ADD Esalary CHAR(5)

在雇员表中加入一列,字符型(长度为5)的雇员薪水.

ALTER TABLE Wmployee DROP UNIQUE(Ename);

去掉雇员表中雇员姓名的唯一属性.

ALTER TABLE Employee MODIFY Esex CHAR(1);

把雇员表中的性别列改为一位字符型.

2,数据查询部分

这是SQL语句中最灵活,功能最强的部分.

(1)基本查询语句

SELECT Eno,Ename,Esex FROM Employee

查询Employee表中的Eno,Ename,Esex三列

SELECT * FROM Employee

查询Employee表中的所有列.

SELECT DISTINCT Eno FROM Employee;

查询Employee表中的Eno列,并去除重复行.

(2)条件(WHERE)查询语句

插叙条件的连接词如下:NOT,=,>,<,>=,<=,!=,<>,!>,!<,BETWEEN AND,NOT BETWEEN AND(确定范围),LIKE,NOT LIKE(字符匹配),IS NULL,IS NOT NULL(空值),AND,OR(多条件连接).

ⅰ 比较

SELECT Eno FROM Employee WHERE Eage <=25

列出表中年龄小于25的雇员号

ⅱ 确定范围

SELECT Eno,Ename FROM Employee

WHERE Eage [NOT] BETWEEN 20 AND 30

列出表中年龄(不)在20到30的雇员号和姓名

ⅲ 确定集合

SELECT Eno,Ename FROM Employee

WHERE Edept [NOT] IN (‘SD',’HD’)

列出表中(不)是软硬件开发部的雇员号和姓名

ⅳ 字符匹配

LIKE的用法如下

[NOT] LIKE ‘<匹配模式>’[ESCAPE ‘<换码符>’]

通配符号有%和_两种。

%:匹配任意长度的字符串(长度可以为0)。A%b可与ab,adfb等匹配。

_:匹配单个任意字符。a_b可与a#b,a@b等匹配。

如果有ESCAPE,则跟在换码符号后的%或者_不再是通配符号,只是正常的%或_。

例如:

SELECT * FROM Employee WHERE Ename LIKE ‘刘%’

查找表中姓刘雇员的信息

SELECT * FROM Employee Where Ename LIKE ‘刘_ _’

查找表中姓名为刘某(两个字)的雇员的信息。

SELECT * FROM Employee WHERE Espe LIKE ‘DB\%t_‘ESCAPE’\’

查找表中特长项为DB_开始,倒数第二个字符为t的雇员的信息。

Ⅴ 空值SELECT * FROM Employee WHEREE Espe IS [NOT] NULL

查找表中特长项(不)为空的雇员信息。

Ⅵ 多条件连接

SELECT Ename FROM Employee WHERE Edept ='SD' AND Eage <=30;

列出表中软件开发部门30及30岁以下雇员姓名。

(3)结果排序

对查询结果进行排序用ORDERBY,ASC(默认)为升序,DESC为降序

SELECT * FROM Employee ORDER BY Edept,Eage DESC

(4)结果分组

对查询结果的分组一般要用到SQL的集函数,因此先介绍集函数。

SQL语言的集函数主要有COUNT(统计总数),SUM(求和),AVG(求均值),MAX(最大值),MIN(最小值)。

SELECT MAX(Eage) FROM Employee WHERE Edept='SD'

列出软件开发部年纪最大雇员的姓名。

SELECT Edept FROM Employee GROUP BY Edept HAVING Count(*)>10

统计各部门的雇员数,只显示雇员数大于10的部门。

SELECT Edept,COUNT(Eno) FROM Employee GROUP BY Edept

统计各部门雇员数,按部门分组列出各部门的雇员数。

(5)连接查询

连接查询是查询涉及多个数据表,FROM后连接多个表的情况。

假如我们要统计各个项目参加人的雇员号和姓名,涉及的表Eproject结构如下:

Eproject (Eno CHAR(6),Pno CHAR(6),TimeBgnTIME,

TimeEnd TIME,Remark CHAR(50))

相应的查询语句为:

SELECT Eproject.Pno,Employee.Eno,Ename

FROM Employee,Eproject

WHERE Employee.Eno=Eproject.Eno

ORDER BY Eproject.Pno;

列出参加各项目的雇员号和姓名,并按照项目号升序排列。

(6)集合查询

集合查询指的是多个SELECT查询结果间进行的集合操作。主要有UNION(并操作),INTERSECT(交操作),MINUS(差操作),其中标准SQL中没有提供交操作和差操作,但他们可以使用联合查询实现。

假如我们要查询硬件开发部年龄不大于25岁的雇员,可以结合查询实现如下:

SELECT * FROM Employee WHERE Edept='HD' UNION SELECT * FROM Employee WHERE Eage<=25

3,数据更新部分

SQL中的数据更新语句有INSERT,UPDATE和DELETE三种,用法如下:

(1)插入数据

INSERT INTO Employee

valueS ('13253','王二','男','23','SD','DB_Project')

向雇员表中插入一条完整的数据

INSERT INTO Employee (Eno,Ename)

valueS ('13253','王二');

向表中插入一条数据,只包含雇员号和姓名,其他列为空值。

注意:以上情况,属性为非空的列一定不能为空值。

(2)修改数据

UPDATE Employee SET Eage=24 WHERE Eno='13253'

将表中13253号雇员年龄改为24岁

(3)删除数据

DELETE FROM Employee WHERE Eno='13253'

4,数据控制部分

(1)用户授权

SQL用户授权使用GRANT关键词,它的用法如下:

GRANT SELECT ON TABLE Employee TO usr1;

允许用户usr1查询表Employee

GRANT ALL PRIVILEGES ON TABLE Employee TO usr2;

允许用户usr2对表Employee的任何操作

(2)收回权限

SQL中收回用户权限使用REVOKE关键词

REVOKE UPDATE(Eno) ON TABLE Employee FROM usr3;]

收回usr3更新表Employee中Eno列的权利

REVOKE ON TABLE Employee FROM PUBLIC

不允许所有用户在表Employee中添加数据。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有