--选择数据库
mysql>
use
test
database
changed
--创建示例用表
mysql>
create
table
zzm(
->
id
int
primary
key
auto_increment,
->
name
varchar(10)
->
)
query
ok,
0
rows
affected
(0.20
sec)
mysql>
insert
into
zzm(name)
values('zhang')
query
ok,
1
row
affected
(0.08
sec)
mysql>
insert
into
zzm(name)
values('zeng')
query
ok,
1
row
affected
(0.05
sec)
mysql>
insert
into
zzm(name)
values('ming')
query
ok,
1
row
affected
(0.05
sec)
mysql>
select
*
from
zzm
+----+-------+
|
id
|
name
|
+----+-------+
|
1
|
zhang
|
|
2
|
zeng
|
|
3
|
ming
|
+----+-------+
3
rows
in
set
(0.00
sec)
--更改命令结束符(因为在procedure中经常要用到默认的命令结束符--分号()
--所以在创建procedure的时候需要定义新的结束符以说明创建procedure的命令结束)
--这里将结束符号改成美元符号--$
mysql>
delimiter
$
--创建mysql存储过程p3
--此存储过程的过程名是p3,该过程包含两个参数,
--一个是输入类型的(以in标示),参数名是nameid,类型是int,
--一个是输出类型的(以out标示),参数名是person_name,类型是varchar(10)
--此存储过程的作用是查询出zzm表的全部内容,会输出结果集(data
set),然后
--再查询表中记录的id是nameid的字段name,将其输出到第二个输出类型的参数里面,这个查询
--不会输出结果集。
mysql>
create
procedure
p3(in
nameid
int,
out
person_name
varchar(10))
->
begin
->
select
*
from
test.zzm
->
select
zzm.name
into
person_name
from
test.zzm
where
zzm.id
=
nameid
->
end
->
$
query
ok,
0
rows
affected
(0.00
sec)
可以使用现成的包python-sql is a library to write SQL queries in a pythonic way.
Nutshell
Import:
>>>from sql import *
>>>from sql.aggregate import *
>>>from sql.conditionals import *
Simple selects:
>>>user = Table('user')
>>>select = user.select()
>>>tuple(select)
('SELECT * FROM "user" AS "a"', ())
>>>select = user.select(user.name)
>>>tuple(select)
('SELECT "a"."name" FROM "user" AS "a"', ())
>>>select = user.select(Count(Literal(1)))
>>>tuple(select)
('SELECT COUNT(%s) FROM "user" AS "a"', (1,))
>>>select = user.select(user.id, user.name)
>>>tuple(select)
('SELECT "a"."id", "a"."name" FROM "user" AS "a"', ())
首先是解析XML漏洞。如果您的应用程序加载和解析XML文件,那么您可能正在使用XML标准库模块。有一些针对XML的常见攻击。大多数是DoS风格(旨在破坏系统而不是窃取数据)。这些攻击很常见,尤其是在解析外部(即不受信任的)XML文件时。一种这样的攻击是“十亿笑”,因为加载的文件包含许多(十亿)“笑”。您可以加载XML实体文件,当XML解析器尝试将此XML文件加载到内存中时,它将消耗许多GB的内存。
其次是SQL注入漏洞。SQL注入漏洞的原因是用户输入直接拼接到SQL查询语句中。在pythonweb应用程序中,orm库一般用于数据库相关的操作。例如,Flask和Tornado经常使用SQLAlchemy,而Django有自己的orm引擎。.但是如果不使用ORM,直接拼接SQL语句,就有SQL注入的风险。
再者是输入函数漏洞。在Python2的大量内置特性中,输入是一场彻底的安全灾难。一旦调用它,从标准输入读取的任何内容都会立即解析为Python代码,显然,除非脚本的标准输入中的数据完全可信,否则决不能使用输入函数。Python2文档建议将rawinput作为安全的替代方案。在Python3中,input函数等价于rawinput,一劳永逸地解决了这个陷阱。
要知道SSTI是ServerSideTemplateInjection,是Web开发中使用的模板引擎。模板引擎可以将用户界面和业务数据分离,逻辑代码和业务代码也可以相应分离,代码复用变得简单,开发效率也提高了。模板在服务器端使用,数据由模板引擎渲染,然后传递给用户,可以为特定用户/特定参数生成对应的页面。我们可以对比一下百度搜索,搜索不同词条得到的结果页面是不一样的,但是页面的边框基本是一样的。