所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
为什么会产生SQL注入?
没有对用户的输入字符进行过滤
服务器或数据库没有做相应的安全配置
攻击者可以伪造数据结构
SQL注入的方式 : post get cookie
get注入:
http://www.xxx.com/news.php?id=1’ 返回错误
http://www.xxx.com/news.php?id=1 and 1=1 返回正常
http://www.xxx.com/news.php?id=1 and 1=2 返回错误
post注入:
1.利用mysql命令中的关键字
admin’#
admin’–
‘or 1=1 #
2.post数据包
sql注入防御:
一、过滤
1、trim():函数过滤掉头和尾的空格
2、Htmlspecialchars():函数把预定义字符串转化为实体,可以防止因为PHP_SELF带来的XSS攻击
3、Stripslashes():去掉反斜杠
4、Addslashes():添加反斜杠
5、数字类型判断类型:is_numeric()
二、使用pdo预定义处理
提供给预处理语句的参数不需要用引号括起来,驱动程序会自动处理。如果应用程序只使用预处理语句,可以确保不会发生SQL 注入。(然而,如果查询的其他部分是由未转义的输入来构建的,则仍存在 SQL 注入的风险)。
p
d
o
−
>
p
r
e
p
a
r
e
(
pdo->prepare(
pdo−>prepare(sql);
p
d
o
−
>
e
x
e
c
u
t
e
(
a
r
r
a
y
(
“
i
d
”
=
>
pdo->execute(array(“id”=>
pdo−>execute(array(“id”=>id));
web安全-xss跨站脚本攻击
magic_quotes_gpc 函数判断
跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
XSS的攻击方式
(1)反射型: 发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS随响应内容一起返回给浏览器,最后浏览器解析执行XSS代码,这个过程就像一次发射,所以叫反射型XSS。
(2)存储型: 存储型XSS和反射型的XSS差别就在于,存储型的XSS提交的代码会存储在服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码。
示例:
防御:
推荐后端验证:htmlspecialchars()、addslashes()