PHP网页编程之避免捏造跨站恳求的小招式
《PHP+MYSQL WEB开发(第三版)》号称圣经级,(也许是个不错的选择(声明:作者没给我啥好处费,我也不是书托,隔着大老远,我连他老兄的面都没见过的说-_-) 捏造跨站恳求引见捏造跨站恳求对照难以提防,并且伤害伟大,进击者可以经由过程这类体例恶作剧,发spam信息,删除数据等等。这类进击罕见的体现模式有:
捏造链接,勾引用户点击,或是让用户在不知情的情形下会见
捏造表单,勾引用户提交。表单可所以埋没的,用图片或链接的模式假装。
对照罕见并且也很便宜的提防手腕是在一切能够触及用户写操作的表单中到场一个随机且变换频仍的字符串,然后在处置表单的时分对这个字符串停止反省。这个随机字符串假如和以后用户身份相干联的话,那末进击者捏造恳求会对照费事。
yahoo凑合捏造跨站恳求的举措是在表单里到场一个叫.crumb的随机串;而facebook也有相似的处理举措,它的表单里经常会有post_form_id和fb_dtsg。
随机串代码完成
我们依照这个思绪,盗窟一个crumb的完成,代码以下:
<?php
class Crumb {
CONST SALT = "your-secret-salt";
static $ttl = 7200;
static public function challenge($data) {
return hash_hmac('md5', $data, self::SALT);
}
static public function issueCrumb($uid, $action = -1) {
$i = ceil(time() / self::$ttl);
return substr(self::challenge($i . $action . $uid), -12, 10);
}
static public function verifyCrumb($uid, $crumb, $action = -1) {
$i = ceil(time() / self::$ttl);
if(substr(self::challenge($i . $action . $uid), -12, 10) == $crumb
substr(self::challenge(($i - 1) . $action . $uid), -12, 10) == $crumb)
return true;
return false;
}
}
代码中的$uid暗示用户独一标识,而$ttl暗示这个随机串的无效工夫。
使用示例
机关表单
在表单中拔出一个埋没的随机串crumb
<form method="post" action="demo.php"> <input type="hidden" name="crumb" value="<?php echo Crumb::issueCrumb($uid)?>"> <input type="text" name="content"> <input type="submit"> </form>
处置表单 demo.php
对crumb停止反省
<?php
if(Crumb::verifyCrumb($uid, $_POST['crumb'])) {
//依照正常流程处置表单
} else {
//crumb校验掉败,毛病提醒流程
}
不可能吃饭的时候咬了自己一下舌头就从此不吃饭了不是?放下畏惧,继续努力,咱们是来征服它的,而不是被它征服的,振奋起来吧同志。 学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql 我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。 php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。 本文当是我的笔记啦,遇到的问题随时填充 你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。 对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。 建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。 当然这种网站的会员费就几十块钱。 要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。 至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。 有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。 刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。 基础有没有对学习php没有太大区别,关键是兴趣。 我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能: 我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。 要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。 基础有没有对学习php没有太大区别,关键是兴趣。 环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。 使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
页:
[1]
2