SQL,-- 注释符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL,-- 注释符相关的知识,希望对你有一定的参考价值。

请问下,在SQL中, 注释符(--) 是如何使用的。最好是,贴个语句上来。

在SQL标准中标准的注释方式是"--"注释,即单行注释,不过不同的数据库注视方式也略有不同,下面是各个数据库支持饿方式
其中这是方式基本上每个数据库都是支持的mysql 注释方法
在MySQL中病支持标准的"--"注释方式,他采用的是"#"方式才进行单行注释。
1."#"注释. 以#开头的一句表示注释一行如:
#
##创建用户表
#
create table user(
id int primary key not null,
name varchar(20));
#注释也可以用在行中注释,注释从#开始,到行末结束.如:
create table user(
id int primary key not null, # 用户id
name varchar(20));2.这种是C语言的注释风格,支持一行注释也支持多行注释。另外还可以是行内注释
1) 单行注释 即用注释一行如

create table student(
id int primary not null,
name varchar(50));
2)多行注释 即可以跨行注释如

create table student(
id int primary not null,
name varchar(50));
3)行内注释 即注释的内容可以在sql语句中,可以用来对字段进行注释。如:
create table student(
id int ,name varchar(50) );SqlServer 注释方法
--注释,即标准的单行注释
--
----创建用户表
--
create table student(
id int primary not null,
name varchar(50));
注释:用法同MySQL的注释方式,支持单行,多行和行内注释。Oracle和DB2数据库的注释方式基本上和SqlServer相同,参见上面。
参考技术A

在SQL中注释符--是和开发语言的注释使用类似--开头的语句不会被执行和解析,只能作为描述(注释)出现。

SQL中的特殊符号:

'   -- 单引号
"  --双引号
& -- 并且
||  -- 连接符
@ --定义变量
% -- 模糊查询符号
*  -- 通配符
()  -- 括号
--  --注释

参考技术B 在SQL中, 注释符(--) 中人注释单行的,在--符号之后的任何SQL都是不能被执行的。
如:select 1+3 from dual; --这个是1+3的运算

在SQL中, 注释多行,需要用符号:/* */
如:
/*这是一个
执行块的
定义
*/
declare
参考技术C 要注释的语句前面加--就可以了。比如:select * from xxx -- 我正打开xx表里的所有数据 参考技术D select * from userinfo --where username=‘123’

查询时只会执行select * from userinfo,后面的不会执行。

sqli-labs(过滤注释符)

第二十三关:

这关还是一个GET型、字符串、单引符号、的有报错的sql注入,输入?id=1\'  ,页面会报错

我们继续按照之前的套路来,先输入?id=1\' or \'1\'=\'1

页面正常显示,说明这个地方又很有可能存在sql注入。继续输入?id=1\' or  \'1\'=\'1\' %23

发现页面居然报错,从报错信息中发现我们的注释符居然没了,说明后台对注释符中做了过滤。

像这种情况,没办法用注释隔断后面的sql语句,就只能用闭合的方法了。但是这里有一点就是,实际测试中,不知道表的行数,而这里又不能使用order by。 因为order by一般在sql语句的尾部,在order by后面再使用\'闭合后面的单引号,sql会将order by 忽略掉。

例如我们输入?id=1\' order by 300 and \'1\'=\'1 

程序永远不回出错,也就无法使用oder by进行判断了。这里就只能一点点的尝试了

依次输入

?id=1\' union select  \'1

?id=1\' union select  1 , \'1

?id=1\' union select  1 , 1 ,\'1

发现前来个都会报错,而最后一个不报错,说明当前查询表的列数是三列。

 

 

 知道是三列后,后面继续输入

?id=-1\'  union  select  1,2,\'3

 

可以看到,第2、3两列的数据会显示出来,由于第三列用于闭合后面的单引符号,我们只能将第二列用于查询操作。

输入?id=-1\'  union  select  1, user(),\'3  查询处当前用户名

 

输入?id=-1\'  union  select  1, (select group_concat(schema_name) from information_schema.schemata),\'3

 

以上是关于SQL,-- 注释符的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入(过滤空格和--+等注释符)

sqli-labs(过滤注释符)

SQL Server支持两种注释,一种是行注释,以”--“开头;另一种是块注释以‘/*'开

Lua注释符的问题

sql注入中关于注释的一点探索

java成神之——注释修饰符