php sql注入教程,SQL注入
如果需要通过网页需要用户输入的数据并将其插入到一个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注入相关推荐
- SQL语句教程-------SQL语法
SQL语句教程-------SQL语法 在这一页中,我们列出所有在这个网站有列出 SQL 指令的语法.若要更详尽的说明,请点选指令名称. 这一页的目的是提供一个简洁的 SQL 语法做为读者参考之用.我 ...
- php注入教程,php注入点构造代码实例详解
php注入代码,方便注入测试 把下面保存成 Test.asp 代码如下: $mysql_server_name = "localhost"; $mysql_username = & ...
- sql server教程sql存储过程和算法
sql 2005分页存储过程实例 /* -------------寒冰制作--------------- ------------------------------------ ---------- ...
- SQL 注入教程:通过示例学习
数据是信息系统最重要的组成部分之一.组织使用数据库驱动的 Web 应用程序从客户那里获取数据.SQL是结构化查询语言的首字母缩写.它用于检索和操作数据库中的数据. 什么是 SQL 注入? SQL 注入 ...
- 【sql注入教程】SQL注入是什么?我们如何去玩转它
[sql注入教程]SQL注入是什么?我们如何去玩转它 本文转自:i春秋社区 SQL注入攻击是黑客攻击数据库最常见手段之一.简单讲,SQL注入攻击是黑客利用网站程序漏洞,通过提交精心构造的SQL语句 ...
- 最详细SQL注入教程
随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进 ...
- SQL注入教程——(一)SQL注入原理
本系列文章将从SQL注入基础讲解,面向初学者,循序渐进. 如有不足,敬请指正. 前置技能 了解SQL语言.语法.操作.常用函数 (基本的SQL数据库操作是进行SQL注入攻击的基础) 了解PHP语言,以 ...
- web 漏洞入门之 —— SQL 注入教程
SQL 注入是最常见.最被人们熟知的 web 漏洞.根据百科的解释:所谓SQL注入,就是通过把SQL命令,插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. ...
- SQL注入教程——(三)简单的注入尝试
本文将以简单的SQL注入实例来讲解SQL注入的基本思路与流程,当然本文实例只是注入的一种情况,初学者应重点理解思路,学会举一反三. GET与POST 进行SQL注入攻击,大家还需要了解两种基本的 HT ...
最新文章
- 神经病啊!——微信同层播放器接(踩)入(坑)总结
- 如何自学python基础-零基础如何自学成为Python高手?我有几点干货
- 产品开发专业认证_食品招生季食品科学与工程专业介绍
- java文件共享ftp怎么访问_文件共享服务器
- 查看mysql是否内存中读取数据_MySQL中的内存临时表
- AVIO内存输入模式
- java实现豆瓣回帖机器人
- Java基础----泛型
- Cannot change version of project facet Dynamic Web Module to 3.0
- gulp教程之gulp-minify-css
- 红与黑题解(深搜入门ing)
- bilibili mac客户端 哔哩哔哩 b站mac客户端
- [网络工程师]-防火墙-入侵防护系统IPS
- 域名解析不生效的原因及排查方法
- UE-Vs转Rider for UE
- 图书信息管理系统Java
- ulimit -SHn 65535含义
- 实战:第八章:支付宝Native,JSAPI支付与微信Native,JSAPI,MWEB支付实现
- 华为云数据库赋能数字化转型,为让云原生数据库走进千行百业
- jQuery实例之表单验证
热门文章
- android jmdns,Android异常:’java.lang.NoClassDefFoundError:javax.jmdns.JmDNS’
- WAHT Linux cgroup
- iPhone X适配
- ios系统更新提示没有连接到服务器上,ios 更新时不再连接到无线网
- FIFAonline 4 游戏博客序言
- 在android8.1 展锐 关闭系统的selinux seandroid
- 计算机系统结构填空题
- python判断字符串对称_对称子字符串(python3)
- ✿ISCC2021✿题目以及部分wp
- Android.Settings类设置默认输入法