SQL注入代码分析
2014-02-13 00:00
204 查看
仔细看了下dvwa里面的sql注入,对此加以分析,为什么会导致该问题。
以下代码是安全性最低的,且看下:
在一开始,仅仅只对提交的数据判断是否为空,如果不为空则直接把数据带入查询,导致sql注入的产生。
数据没有经过任何的过滤手段,攻击者只需要填入非空的数据,即可达到注入的目的。
再看安全级别中等的代码:
该级别唯一改善的就是对符号的转意,但并不能阻止我们注入。
mysql_real_escape_string函数仅仅是为了转义某些特殊符号,例如'号,可以直接转义。
让它不能注入。这里与中级不同的就是在这。
再看高级的:
高级的比上面多了一个去除换行符号,也就上下文的概念。,
以下代码是安全性最低的,且看下:
<?php if(isset($_GET['Submit'])){ // Retrieve data $id = $_GET['id']; $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'"; $result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' ); $num = mysql_numrows($result); $i = 0; while ($i < $num) { $first = mysql_result($result,$i,"first_name"); $last = mysql_result($result,$i,"last_name"); echo '<pre>'; echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last; echo '</pre>'; $i++; } } ?>
在一开始,仅仅只对提交的数据判断是否为空,如果不为空则直接把数据带入查询,导致sql注入的产生。
数据没有经过任何的过滤手段,攻击者只需要填入非空的数据,即可达到注入的目的。
再看安全级别中等的代码:
<?php if (isset($_GET['Submit'])) { // Retrieve data $id = $_GET['id']; $id = mysql_real_escape_string($id); $getid = "SELECT first_name, last_name FROM users WHERE user_id = $id"; $result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' ); $num = mysql_numrows($result); $i=0; while ($i < $num) { $first = mysql_result($result,$i,"first_name"); $last = mysql_result($result,$i,"last_name"); echo '<pre>'; echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last; echo '</pre>'; $i++; } } ?>
该级别唯一改善的就是对符号的转意,但并不能阻止我们注入。
mysql_real_escape_string函数仅仅是为了转义某些特殊符号,例如'号,可以直接转义。
让它不能注入。这里与中级不同的就是在这。
再看高级的:
<?php if (isset($_GET['Submit'])) { // Retrieve data $id = $_GET['id']; $id = stripslashes($id); $id = mysql_real_escape_string($id); if (is_numeric($id)){ $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'"; $result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' ); $num = mysql_numrows($result); $i=0; while ($i < $num) { $first = mysql_result($result,$i,"first_name"); $last = mysql_result($result,$i,"last_name"); echo '<pre>'; echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last; echo '</pre>'; $i++; } } } ?>
高级的比上面多了一个去除换行符号,也就上下文的概念。,
相关文章推荐
- [代码审计]DM企业建站系统v201710 sql注入漏洞分析 | 新版v201712依旧存在sql注入
- rails 的 REST 结构和 route 代码分析
- 【Heritrix基础教程之4】开始一个爬虫抓取的全流程代码分析 分类: H3_NUTCH 2014-06-04 20:10 1039人阅读 评论(0) 收藏
- JAVA 安全性转码代码(包括sql注入,跨站脚本)
- C#分析数据库结构,使用XSL模板自动生成代码
- 代写CS|留学生|金融编程|代码代做|C++语言|JAVA|R语言|Python|经济统计|数值分析|建模|作业加急|天才写手网
- ADSL宽带拨号691错误代码分析与详细解释
- linux内核分析第二周-完成一个简单的时间片轮转多道程序内核代码
- PMD3.1 java代码分析
- 利用xdebug对php代码进行性能分析
- Extremal Region(极值区域)文本定位与识别法-代码分析(一)
- kernel 网桥代码分析
- SDL2源代码分析2:窗口(SDL_Window)
- 恶意代码分析实战 Lab 7-2 习题笔记
- SDL2源代码分析8:视频显示总结
- ssh框架的构成分析和代码构架小结
- 手机自动化测试:Appium源码分析之跟踪代码分析五
- phpcms2008代码分析2008-12-11(/admin.php)
- 某线程池代码分析 <一>
- FLV格式的解复用和PTS分析代码