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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
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注入:
  拿到我的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/

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL 关系型数据库 MySQL
TiDB支持的SQL语法概述
【2月更文挑战第28天】本章将对TiDB所支持的SQL语法进行概述,涵盖其主要的语法特性和功能。我们将从基本的SQL语句到更复杂的查询和操作,逐步介绍TiDB的SQL语法,帮助读者更好地理解和使用TiDB进行数据库操作。
|
1月前
|
SQL 监控 安全
SQL注入的实现原理以及防止
SQL注入的实现原理以及防止
|
1月前
|
SQL Java 应用服务中间件
Java项目防止SQL注入的四种方案
Java项目防止SQL注入的四种方案
39 0
|
1月前
|
SQL 数据库
sql server中创建数据库和表的语法
sql server中创建数据库和表的语法
18 1
|
1月前
|
SQL 存储 关系型数据库
SQL的基本语法以及SQL语句的关键字的使用,SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、DROP等。
SQL的基本语法以及SQL语句的关键字的使用,SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、DROP等。
|
6天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
14 0
|
14天前
|
安全 Linux PHP
【攻防世界】php_rce (ThinkPHP5)
【攻防世界】php_rce (ThinkPHP5)
|
14天前
|
PHP
【攻防世界】easyphp(PHP代码审计)
【攻防世界】easyphp(PHP代码审计)
|
14天前
|
SQL 安全 PHP
CTF--Web安全--SQL注入之Post-Union注入
CTF--Web安全--SQL注入之Post-Union注入
|
1月前
|
SQL 监控 测试技术
SQL语法优化与最佳实践
【2月更文挑战第28天】本章将深入探讨SQL语法优化的重要性以及具体的优化策略和最佳实践。通过掌握和理解这些优化技巧,读者将能够编写出更高效、更稳定的SQL查询,提升数据库性能,降低系统资源消耗。