如果需要通过网页需要用户输入的数据并将其插入到一个SQL数据库,可能会留下敞开称为SQL注入安全问题。

这一课将教你如何防止这种情况的发生,并帮助您保护服务器端脚本,如Perl脚本中使用的SQL语句。

注入通常当要求一个用户输入,就如他们的名字,但他们给你不是一个名字,会在不知不觉中对数据库运行SQL语句时发生问题。

千万不要信任用户提供的数据,处理这些数据只是验证后;作为一项规则,通过模式匹配进行。

在下面的例子中,该名称被限制为字母数字字符加下划线并以8至20个字符之间的长度(根据需要修改这些规则)。

if(preg_match("/^w{8,20}$/",$_GET['username'],$matches)){$result=mysql_query("SELECT * FROM CUSTOMERS

WHERE name=$matches[0]");}else{echo"user name not accepted";}

为了说明问题,考虑这个片段:

// supposed input$name="Qadir'; DELETE FROM CUSTOMERS;";mysql_query("SELECT * FROM CUSTOMSRS WHERE name='{$name}'");

函数调用应该检索来自CUSTOMERS表,其中name列相匹配用户指定名称的记录。在正常情况下,$name应该只包含字母数字字符和或许空格,如字符串ilia。 但在这里,通过附加一个全新的查询$name,调用数据库变成灾难:注入DELETE查询删除所有记录的客户。

幸运的是,如果你使用MySQL,在mysql_query()函数不允许查询堆叠或一个函数调用执行多个SQL查询。 如果您尝试堆叠查询,调用失败。

然而,其他PHP数据库扩展,如SQLite和PostgreSQL,愉快地进行堆查询,执行都在一个字符串提供的查询,并创建一个严重的安全问题。

防止SQL注入:

您可以在脚本语言,如Perl和PHP巧妙地处理所有转义字符。MySQL扩展为PHP提供的函数mysql_real_escape_string()来转义特殊MySQL的输入字符。

if(get_magic_quotes_gpc()){$name=stripslashes($name);}$name=mysql_real_escape_string($name);mysql_query("SELECT * FROM CUSTOMERS WHERE name='{$name}'");

LIKE困惑:

为了解决LIKE问题,一个自定义的转义机制必须将用户提供的'%'和'_'字符文字。 使用addslashes()函数,可以让你指定一个字符范围转义。

$sub=addcslashes(mysql_real_escape_string("%str"),"%_");// $sub == \%str\_mysql_query("SELECT * FROM messages

WHERE subject LIKE '{$sub}%'");

¥ 我要打赏

纠错/补充

收藏

上一篇:

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

php sql注入教程,SQL注入相关推荐

  1. SQL语句教程-------SQL语法

    SQL语句教程-------SQL语法 在这一页中,我们列出所有在这个网站有列出 SQL 指令的语法.若要更详尽的说明,请点选指令名称. 这一页的目的是提供一个简洁的 SQL 语法做为读者参考之用.我 ...

  2. php注入教程,php注入点构造代码实例详解

    php注入代码,方便注入测试 把下面保存成 Test.asp 代码如下: $mysql_server_name = "localhost"; $mysql_username = & ...

  3. sql server教程sql存储过程和算法

    sql 2005分页存储过程实例 /* -------------寒冰制作--------------- ------------------------------------ ---------- ...

  4. SQL 注入教程:通过示例学习

    数据是信息系统最重要的组成部分之一.组织使用数据库驱动的 Web 应用程序从客户那里获取数据.SQL是结构化查询语言的首字母缩写.它用于检索和操作数据库中的数据. 什么是 SQL 注入? SQL 注入 ...

  5. 【sql注入教程】SQL注入是什么?我们如何去玩转它

    [sql注入教程]SQL注入是什么?我们如何去玩转它 本文转自:i春秋社区   SQL注入攻击是黑客攻击数据库最常见手段之一.简单讲,SQL注入攻击是黑客利用网站程序漏洞,通过提交精心构造的SQL语句 ...

  6. 最详细SQL注入教程

    随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进 ...

  7. SQL注入教程——(一)SQL注入原理

    本系列文章将从SQL注入基础讲解,面向初学者,循序渐进. 如有不足,敬请指正. 前置技能 了解SQL语言.语法.操作.常用函数 (基本的SQL数据库操作是进行SQL注入攻击的基础) 了解PHP语言,以 ...

  8. web 漏洞入门之 —— SQL 注入教程

    SQL 注入是最常见.最被人们熟知的 web 漏洞.根据百科的解释:所谓SQL注入,就是通过把SQL命令,插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. ...

  9. SQL注入教程——(三)简单的注入尝试

    本文将以简单的SQL注入实例来讲解SQL注入的基本思路与流程,当然本文实例只是注入的一种情况,初学者应重点理解思路,学会举一反三. GET与POST 进行SQL注入攻击,大家还需要了解两种基本的 HT ...

最新文章

  1. 神经病啊!——微信同层播放器接(踩)入(坑)总结
  2. 如何自学python基础-零基础如何自学成为Python高手?我有几点干货
  3. 产品开发专业认证_食品招生季食品科学与工程专业介绍
  4. java文件共享ftp怎么访问_文件共享服务器
  5. 查看mysql是否内存中读取数据_MySQL中的内存临时表
  6. AVIO内存输入模式
  7. java实现豆瓣回帖机器人
  8. Java基础----泛型
  9. Cannot change version of project facet Dynamic Web Module to 3.0
  10. gulp教程之gulp-minify-css
  11. 红与黑题解(深搜入门ing)
  12. bilibili mac客户端 哔哩哔哩 b站mac客户端
  13. [网络工程师]-防火墙-入侵防护系统IPS
  14. 域名解析不生效的原因及排查方法
  15. UE-Vs转Rider for UE
  16. 图书信息管理系统Java
  17. ulimit -SHn 65535含义
  18. 实战:第八章:支付宝Native,JSAPI支付与微信Native,JSAPI,MWEB支付实现
  19. 华为云数据库赋能数字化转型,为让云原生数据库走进千行百业
  20. jQuery实例之表单验证

热门文章

  1. android jmdns,Android异常:’java.lang.NoClassDefFoundError:javax.jmdns.JmDNS’
  2. WAHT Linux cgroup
  3. iPhone X适配
  4. ios系统更新提示没有连接到服务器上,ios 更新时不再连接到无线网
  5. FIFAonline 4 游戏博客序言
  6. 在android8.1 展锐 关闭系统的selinux seandroid
  7. 计算机系统结构填空题
  8. python判断字符串对称_对称子字符串(python3)
  9. ✿ISCC2021✿题目以及部分wp
  10. Android.Settings类设置默认输入法