议论PHP网站的防SQL注入

SQL(Structured Query
Language)即结构化查询语言。SQL 注入,就是管 SQL 命令插入到 Web
表单的输入域或页面请求参数的查询字符串中,在 Web表单向 Web 服务器交由
GET 或 POST
请求时,如果服务器端未严格验证参数的中和合法性,将导致数据库服务器执行恶意之
SQL 命令。

SQL 注入攻击的经过:

(1)判断 Web 应用是否可以进行 SQL 注入。

(2)寻找 SQL 注入点。

(3)猜解用户称及密码。

(4)寻找 Web 系统管理后台入口。

(5)实施侵略和损坏。

一律、     SQL注入漏洞测试工具

1.    Sqlmap

Sqlmap 是一个自动化的 SQL 注入工具, 其要职能是扫描,发现并以给定的
URL 的 SQL 注入漏洞,日前支撑的数据库是MS SQL Server, MySQL, oracle 和
postgresql。 SQLMAP 采用四种植特有之 SQL 注入技术,分别是盲推理 SQL 注入,
UNION 查询 SQL 注入,堆查询及基于时间的 SQL
盲注入。其广阔的意义以及选包括数据库指纹,枚举,
数据库提取,访问目标文件系统,并当得了操作权限时实践随机命令。

1.1      sqlmap 常用命令介绍

Target(目标):至少需要装中一个选择,设置目标 URL。

-d DIRECT 直接连接到数据库。

-u URL,–url=URL 目标 URL。

Request(请求):这些选择可以为此来指定如何连接至目标 URL。

――data=DATA 通过 POST 发送的数字符串。

――cookie=COOKIE HTTP Cookie 头。

Optimization(优化):这些选择可用于优化 sqlmap 的性。

-o 开户所有优化开关

–threads=THREADS 最要命的 HTTP( S)请求并发量(默认为 1)。

Injection(注入):这些选择可以据此来指定测试哪些参数。

-p TESTPARAMETER 可测试的参数。

–prefix=PREFIX 注入 payload 字符串前缀。

2     SQLIer

SQLIer可以找到网站及一个发SQL注入漏洞的URL,并因有关信息来转利用SQL注入漏洞,但其不求用户之相。通过这种办法,它好挺成一个UNION SELECT查询,进而可强力攻击数据库口令。这个次在利用漏洞时连无采取引号,这意味着它们只是适应多网站。  

SQLIer通过“true/false”
SQL注入漏洞强力口令。借助于“true/false” SQL注入漏洞强力口令,用户是无法从数据库查询数据的,只能查询一个不过回到“true”、“false”值的口舌。  

以统计,一个八只字符的口令(包括十向前制ASCII代码的其他字符)仅用盖1分钟即可破解。

2.1      其利用语法如下,sqlier [选项] [URL]

其选项如下: 

-c :[主机] 清除主机的狐狸尾巴以信息 

-s :[秒]在网页请求中等的秒数  

-u:[用户名]自打数据库中强力攻击的用户称,用逗号隔开

-w:[选项]将[选项]交由wget

另外,此程序还支持猜测字段名,有如下几栽选择:  

–table-names [表名称]:可进展猜测的报表名称,用逗号隔开

–user-fields[用户字段]:可开展猜测之用户名字段名称,用逗号隔开

–pass-fields [口令字段]:可进展猜测之口令字段名称,用逗号隔开

3     Pangolin

Pangolin是同等磨蹭帮助渗透测试人员进行SQL注入(SQL
Injeciton)测试的平安工具。Pangolin与JSky(Web应用安全漏洞扫描器、Web应用安全评估工具)都是NOSEC公司之活。Pangolin具备友好之图形界面以及支持测试几乎有数据库(Access、MSSql、MySql、Oracle、Informix、DB2、Sybase、PostgreSQL、Sqlite)。Pangolin能够由此一致名目繁多非常简单的操作,达到最大化的攻击测试效果。它于检测注入开始至结尾控制目标系统都深受起了测试步骤。Pangolin是时国内使用率最高的SQL注入测试的安全软件。

仲、     防范SQL注入攻击

1.    对输入的数目进行过滤(过滤输入)

a)     
对于动态构造SQL查询的场地,可以应用替换字符和去特殊字符的方式。

b)    
检查用户输入的合法性,防止不法数据输入。数据检查该在客户端和劳动器端执行。执行服务器端验证,是为了弥补客户端验证机制的阙如。

c)      限制表单SQL Server或询问字符串输入的尺寸限制。

d)     加密用户登录名称、 密码等数。

2.    对发送至数据库的数目进行转义(转义输出)

尽可能使呢从定义数据库设计之转义函数。如果无,使用函数addslashes()是较好的方法,对字符串型参数使用mysql_real_escape_string函数、对数字型参数使用intval,floatval函数强制过滤则更好。当有着用于建一个
SQL 语句的数额被正确过滤与转义时,实际上也就算避免了 SQL注入的风险。

3.    参数化查询

参数化查询(Parameterized Query)指的凡 Web
程序在履行数据库查询时,在待提交数值或数额的地方避免直接赋值,而是以参数来传递给值。

采用参数化查询技术,数据库服务器不见面用参数的情节即 SQL
指令的一个有的来拍卖,在数据库系统形成对 SQL
指令的编译后,再载入参数运行。因此,即使参数中含有令,也无见面给数据库编译运行。

4.    使用存储过程

储存过程存储于数据库系统中, Web 应用程序通过调用来执行存储过程,
该技能允许用户定义变量、有格执行与任何丰富的编程功能。程序开发者利用存储过程事先构建好的
SQL
查询语句代码,然后于运着经过参数传输数值。存储过程在用时由至三触及安全作用:首先,存储过程实行前要开展预编译,编译出错不予执行;其次,对于数据的授权访问是因存储过程要未是一直访问基本表,攻击者无法探测到
select 语词;最后,存储过程可以指定同认证用户提供的值类型。

然而,存储过程为在一定之受制,如果存储过程遭到履行的下令是并接字符串,则会在为注入攻击的隐患。此外,存储过程并无支持具备的数据库平台。

5.    使用PDO连接数据库

防护SQL注入最好的不二法门就是是并非自己设置SQL
命令和参数,而是用PDO的prepare和bind,原理就是在使拿SQL查询命令和传递的参数分开。使用prepare的早晚,DB
server会把SQL语句解析成SQL命令。使用bind的时光,只是动态传递DB
Server解析好之 SQL 命令。

三、     总结

除开以上介绍的防护SQL注入攻击方式之外,还有URL重置技术、页面静态化、屏蔽出错信息、使用web应用防火墙等办法。通过上述办法,SQL注入才能够防患于未然。

相关文章