php表单提交中sql提防注入攻击二

        上一篇文章我们讲到了基本的sql注入攻击的概念问题,想必有很多人会基本了解到了我们的用户是如何做到sql注入攻击的,以及我们表单设计将会变得很复杂吗?这一篇我们将会真正了解我们前端设计人员的艰辛,仅仅是一个表格的提交,但是我们设计人员却是要付出很多辛苦的,而此篇所讲仅仅只是sql注入攻击,对于很多漏洞以及本身系统的bug所带来的危害,我们能做多少呢?这个下次再聊吧!!
       上一节我们知道了基本概念,和一种最为简单的解决办法就是防止用户使用一些非法字符,但是仅仅如此就可以了吗?下面我们最为深层次了解一些更为重要的sql注入攻击,希望对大家有所帮助!!
       如果我们的用户是一名高级程序员,他会深知一些别人不知道信息,比如GET,SESSION这些php自带的大数组,他们会给我们的程序员带来很多方便的操作,但是一旦这些数据落入到我们的用户手中,结果会变成什么呢?
   
 防止用户操纵 GET 变量
     我们看下面一段简单代码:
<?php
$pid = $_GET[’pid’];
//we create an object of a fictional class Page
$obj = new Page;
$content = $obj->fetchPage($pid);
//and now we have a bunch of PHP that displays the page
?>
这段代码是从用户的url下捕获到用户想要进入的pid新网页,并且进行动态生成新的网页。嘻嘻 我们的用户会非常乖地看着他们url这么正常地跳转吗?我不知道,你也不知道,如果当时的url是这样的www.XXXX.com/template.php?pid=33 这个时候网速不太好了,网页就是刷不出来,我们的用户看到后面写了33,一时间兴趣来了,将pid=33,改成了pid=331怎么办,有些人当然明白这样会跳到指定网页或者网页不存在提示错误,而这一切的前提都是在我们的用户还不知道我们的后台文件存储是如何做的情况下,或者说我们的用户还是不够聪明不能造成语意上的攻击,可是如果一个高手来了,输入别的东西,比如输入 SQL 命令或某个文件的名称(比如 /etc/passwd),或者搞别的恶作剧,比如输入长达 3,000 个字符的数值,那么会发生什么呢?
在这种情况下,要记住基本规则,不要信任用户输入。应用程序开发人员知道 template.php 接受的个人标识符(PID)应该是数字,所以可以使用 PHP 的 is_numeric() 函数确保不接受非数字的 PID

    接下来我们接着再看一段代码,这段代码所蕴含的sql的注入攻击可能比较高明,一看至少是一些程序员在做的事情。

    防止表单远程提交

<?php
if ($_POST[’submit’] == “go”){
//strip_tags
$name = strip_tags($_POST[’name’]);
$name = substr($name,0,40);
//clean out any potential hexadecimal characters
$name = cleanHex($name);
//continue processing….
}

function cleanHex($input){
$clean = preg_replace(”![\][xX]([A-Fa-f0-9]{1,3})!”, “”,$input);
return $clean;
}
?>
<form action=”<?php echo $_SERVER[’PHP_SELF’];?>” method=”post”>
<p><label for=”name”>Name</label>
<input type=”text” name=”name” id=”name” size=”20″ maxlength=”40″/></p>
<input type=”hidden” name=”table” value=”users”/>
<input type=”hidden” name=”action” value=”create”/>
<input type=”hidden” name=”status” value=”live\”/>
<p><input type=”submit” name=”submit” value=”go”/></p>
</form>

     注意,隐藏变量之一暴露了表名:users。还会看到一个值为 create 的 action 字段。只要有基本的 SQL 经验,就能够看出这些命令可能控制着中间件中的一个 SQL 引擎。想搞大破坏的人只需改变表名或提供另一个选项,比如 delete。

现在还剩下什么问题呢?远程表单提交。

Web 的好处是可以分享信息和服务。坏处也是可以分享信息和服务,因为有些人做事毫无顾忌。

     以 表单为例。任何人都能够访问一个 Web 站点,并使用浏览器上的 File > Save As 建立表单的本地副本。然后,他可以修改 action 参数来指向一个完全限定的 URL(不指向 formHandler.php,而是指向 http://www.yoursite.com/formHandler.php,因为表单在这个站点上),做他希望的任何修改,点击 Submit,服务器会把这个表单数据作为合法通信流接收。

首先可能考虑检查 $_SERVER[’HTTP_REFERER’],从而判断请求是否来自自己的服务器,这种方法可以挡住大多数恶意用户,但是挡不住最高明的黑客。这些人足够聪明,能够篡改头部中的引用者信息,使表单的远程副本看起来像是从您的服务器提交的。

处理远程表单提交更好的方式是,根据一个惟一的字符串或时间戳生成一个令牌,并将这个令牌放在会话变量和表单中。提交表单之后,检查两个令牌是否匹配。如果不匹配,就知道有人试图从表单的远程副本发送数据。

     要创建随机的令牌,可以使用 PHP 内置的 md5()、uniqid() 和 rand() 函数,具体的使用还希望大家可以多参考一下php文档和相关资料,希望我们可以共同进步


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像的目标属于哪个类别。 定位问题:确定目标在图像的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值