全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 防范SQL注入方法汇总 Web开发人员认为SQL查询请求是可以信赖的操作,但事实却是恰恰相反的,他们没有考虑到用户可以控制这些查询请求的参数,并且可以在其中输入符合语法的SQL命令。 解决SQL注入问题的方法再次归于对特殊字符的过滤,包括URL、表格域以及用户可以控制的任何输入数据。与SQL语法相关的特殊字符以及保留字应当在查询请求提交到数据库之前进行过滤或者被去除(例如跟在反斜号后面的单引号)。过滤操作最好在服务器端进行。将过滤操作的代码插入到客户机端执行的HTML中,实在是不明智的,因为攻击者可以修改验证程序。防止破坏的唯一途径就是在服务器端执行过滤操作。避免这种攻击更加可靠的方式就是使用存储过程。具体可以通过以下若干方法来防范SQL注入攻击。 (1)对前台传入参数按的数据类型,进行严格匹配(如查看描述数据类型的变量字符串中,是否存在字母)。 (2)对于单一变量(如上面的K,N)如果有必要,过滤或替换掉输入数据中的空格。 (3)将一个单引号(“”),替换成两个连续的单引号(“”)。 (4)限制输入数据的有效字符种类,排除对数据库操作有特殊意义的字符(如“-”)。 (5)限制表单或查询字符串输入的长度。 (6)用存储过程来执行所有的查询。 (7)检查提取数据的查询所返回的记录数量。如果程序只要求返回一个记录,但实际返回的记录却超过一行,那就当作出错处理。 (8)将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了“消毒”处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。 总而言之,就是要尽可能地限制用户可以存取的数据总数。另外,对用户要按“最小特权”安全原则分配权限,即使发生了SQL注入攻击,结果也被限制在那些可以被正常访问到的数据中。二合法性校验1客户端进行合法性校验 我们在制作网站的时候,尤其是各种电子商务网站,首先都会让用户填写一些表格来获取注册用户的各种信息,因为用户有可能输入各式各样的信息,而有些不符合要求的数据会给服务器后台处理程序带来不必要的麻烦,甚至导致网站出现一些安全问题。因此我们在将这些信息保存到网站的数据库之前,要对这些用户所输入的信息进行数据合法性校验,以便服务器后台程序可以安全顺利地执行。 通过运行在客户端的的JavaScript或其它脚本可以检验用户的输入数据。在JavaScript中,利用form.textfield.value得到form表单的textfield文本框中输入的数据,然后通过RegExp对象(保存有关正则表达式模式匹配信息的固有全局对象)的test方法进行正则表达式模式匹配,通过匹配结果决定用户的后续操作。三预编译SQL查询1prepared statement prepared statement可以在执行具体的SQL查询前进行SQL预编译,这样在以后执行相同的SQL查询时,只需传入不同的参数,便可重复执行,而不用每次执行相同的SQL查询时都让服务器耗费时间进行编译。 下面是一个prepared statement的范例。其中符号“?”叫做占位符(placeholder),执行SQL时,必须传入参数,取代占位符,才能真正执行SQL查询。 在SQL查询中使用prepared statement可以增进安全性及效率。 (1)prepared statement把SQL的逻辑语句与传入的参数相分离,可以增加安全性,这样的做法,可以避免SQL注入攻击。如果使用一般的SQL查询,没有分离SQL逻辑与传入参数,就必须非常小心处理用户输入的数据,通常会使用一些特定的函数,限制单引号、双引号、斜杠等特征字符。但是当使用prepared statement时,根本不用使用特殊的函数来避免SQL注入的攻击,你可以直接使用prepared statement,而不会造成任何SQL注入漏洞。 (2)效率的提升来自prepared statement的一些特殊之处,首先prepared statement中的SQL查询只要预编译一次,之后执行的SQL查询就不用再做这些编译动作,如果要执行相同的SQL查询很多次,就可以增加执行的速度。另外,prepared statement使用了binary protocol,传统的mysql会将传入参数转换成字符串,再进行传入,但使用binary protocol后,不会进行参数的转换,而是直接将参数以原有的binary形式进行传入,降低了cpu的负荷,也减少了网络的占用率(转换成字符串,参数量会变大)。2MySQL statement API MySQL在4.1及以上版本中提供了prepared statement功能,通过调用statement API接口函数可以实现prepared statement。MySQL由mysql.stmt.Statement对象提供prepared statement功能。3PHP5支持prepared statement PHP5的mysqli扩展(Improved MySQL Extension)支持prepared statement。它能够访问基于MySQL4.1及以下版本提供的特性。本练习单人为一组。 首先使用“快照X”恢复Linux系统环境。一客户端进行合法性校验 进行实验之前首先启动MySQL服务,命令如下: (1)单击工具栏“控制台”按钮,进入实验目录。login是存在SQL注入漏洞的Web应用程序。复制login.htm和login.php文件到/var/www/html/目录(Web服务文档主目录)。 (2)使用Web浏览器浏览login.htm,在URL地址栏中输入如下信息: 进入“注册会员登录”页面,用户名:hello,密码:hellopass,确定登录成功。 (3)注入攻击 返回login.htm登录界面,输入用户名:hello or 1=1,密码任意,尝试登录。 由于login.htm没有对“用户名”、“密码”输入数据的合法性进行验证,从而导致了SQL被注入。 (4)编辑/var/www/html/login.htm文件,利用JavaScript对用户输入数据进行合法性验证,限制用户输入“”(单引号)、“”(双引号)、“-”、“=”、“;”、“”、“”、“”、“/”、“%”特殊字符及SQL关键字。 (3)加入合法性校验后,尝试基于login.htm进行SQL注入攻击。 (4)加入合法性校验后,尝试基于URL进行SQL注入攻击。 直接在URL链接中输入http:/虚拟主机地址/login.php?username=helloor1=1。 结果:失败。三预处理执行SQL查询 (1)复制并重命名实验目录login.htm和login.php文件至/var/www/html/login3.htm和login3.php。 (2)编辑/var/www/html/login3.php文件,重写PHP访问MySQL数据库部分,利用prepared statem
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030汽车车轮行业运营态势与投资前景调查研究报告
- 2025-2030云计算服务行业竞争格局分析及增长潜力与商业合作机会研究报告
- 2025液化天然气汽车加气站用地性质改变规划选址环境影响评价报告全过程咨询专家评审
- 2025智能语音交互技术在多场景下的商业化应用分析报告
- 2025无人配送机器人市场规模预测及竞争格局研究报告
- 2025新能源汽车产业链市场深度分析及前景预测与资本布局策略报告
- 物业服务客户意见反馈处理
- 从业资格证安全检视考试及答案解析
- 高端机械表维修与保养服务行业2026年产业发展现状及未来发展趋势分析研究
- 2026年家庭电源适配器回收服务合同
- 玉环清港台山100MW沿海滩涂渔光互补项目环评报告
- 酒店稽核管理办法
- 2025年公务员考试行测逻辑推理试题库及答案(共200题)
- 医院会计招聘面试题
- 泛血管疾病抗栓治疗中国专家共识(2025版)
- 劳动教育汇报课件模板
- 海南省宅基地管理办法
- 产程中产妇的饮食管理
- 2025年高中政治学业水平考试主观题知识点总结(复习必背)
- 光栅尺介绍课件
- 颅内动脉瘤夹闭术麻醉管理要点
评论
0/150
提交评论