手把手叫你SQL注入攻防(PHP语法)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:
1.什么是SQL注入,猛戳wikipedia查看
  2.本地测试代码:
  如果表单提交正确,就打印hello,“username”
  否则,打印“404 not found!”
<?php
require 'config.php';
$DBConnection = mysql_connect ( "$dbhost", "$dbuser", "$dbpwd" );
mysql_select_db ( "$dbdatabase" );
if(isset($_GET['submit']) && $_GET['submit']){
$sql="select * from  test where name='".$_GET['username']."'and password='".$_GET['password']."'";
//echo $sql;exit;
$result=mysql_query($sql,$DBConnection);
$num=mysql_num_rows($result);
if($num>=1)
{
echo "hello,".$_GET['username'];
}
else {
echo"404 not found";
}
}
?>
<form action="login.php" method="GET">
<table>
<tr>
<td>username</td>
<td><input type="textbox" name="username"/></td>
<td>password</td>
<td><input type="textbox" name="password"></td>
<td>submit</td>
<td><input type="submit" name="submit"></td>
</tr>
</table>
</form>
  3.浏览器界面显示:
  4.重头戏,sql注入:
5.原理--为什么用户名不正确,却可以显示hello?
  我可以echo一下:
<span style="font-size:18px;">$sql="select * from test where name='".$_GET['username']."'and password='".$_GET['password']."'";
echo $sql;exit;</span>
  显示:
  拿到我的mysql数据库中查询:
  可以看到,居然能查到信息,因为sql语句中,前一半单引号被闭合,后一半单引号被 “--”给注释掉,中间多了一个永远成立的条件“1=1”,这就造成任何字符都能成功登录的结果。
   6.小结:
  1)其实这个sql注入过程上很简单,困难的地方在于提交SQL注入语句的灵活性上面,单引号的使用很关键,另外,多用echo打印调试也很值得一试~~
  2)GET方式提交表单很危险,所以还是用POST方式吧!
  参考:http://blog.csdn.net/gideal_wang/article/details/4316691
  3)防止SQL注入:可以看出,sql注入就是用户提交一些非法的字符(如本文的单引号’和sql语句的注释号--,还有反斜杠\等),所以要用转义:  htmlspecialchars函数,mysql_read_escape_string函数都可以实现。
  4)JS段验证表单了,JSP/PHP等后台还要验证码?
  ---需要,因为friebug可以禁用JS...
  --------------------------------------------------------------------------
  update:
  上面的方法,当password通过md5加密的话,就无法实现注入了,那么就在username上做手脚:


  username后面的内容就都被注释掉了。
最新内容请见作者的GitHub页:http://qaseven.github.io/

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
7月前
|
SQL 数据库连接 Linux
数据库编程:在PHP环境下使用SQL Server的方法。
看看你吧,就像一个调皮的小丑鱼在一片广阔的数据库海洋中游弋,一路上吞下大小数据如同海中的珍珠。不管有多少难关,只要记住这个流程,剩下的就只是探索未知的乐趣,沉浸在这个充满挑战的数据库海洋中。
151 16
|
存储 Java 数据库连接
php学习笔记-代码基本语法-day01
本文是关于PHP编程语言的基础语法学习笔记,内容包括PHP的介绍、注释风格、数据类型、命名规范、常量和变量的使用,以及变量和常量相关的常用函数。文中详细解释了PHP的基本语法元素和一些易混淆的概念,如传值赋值与传址赋值、可变变量,以及如何检查变量是否已定义或为空。
php学习笔记-代码基本语法-day01
|
10月前
|
SQL 存储 关系型数据库
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
本文详细介绍了MySQL中的SQL语法,包括数据定义(DDL)、数据操作(DML)、数据查询(DQL)和数据控制(DCL)四个主要部分。内容涵盖了创建、修改和删除数据库、表以及表字段的操作,以及通过图形化工具DataGrip进行数据库管理和查询。此外,还讲解了数据的增、删、改、查操作,以及查询语句的条件、聚合函数、分组、排序和分页等知识点。
853 55
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
|
11月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
468 4
|
11月前
|
SQL 安全 前端开发
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
352 2
|
11月前
|
SQL PHP 数据库
20 PHP如何捕获sql错误
路老师带你深入学习PHP,掌握技术干货。本文介绍了PDO中捕获SQL错误的三种模式:默认模式、警告模式和异常模式,以及如何使用errorCode()和errorInfo()方法进行错误处理。
229 2
|
11月前
|
SQL 存储 关系型数据库
SQL `CREATE DATABASE` 语法
【11月更文挑战第10天】
308 3
|
11月前
|
SQL 关系型数据库 数据库
sql语法
【10月更文挑战第26天】sql语法
154 5
|
XML 开发框架 .NET
PHP的基本语法是什么样的?
PHP提供了丰富的变量类型,包括整型、浮点数、布尔值、空值(NULL)、字符串和数组等。了解每种类型的特性和用途对于编写高质量的PHP代码至关重要。
111 4
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
282 5

热门文章

最新文章