$_POST安全, 如何避免跨域提交? 我有一些AJAX页面,提交并链接数据库,最近怀疑有人用fsockopen或者curl模拟POST表单,偷取我的数据库资料。如何避免$_POST跨域提交?可否在apache里设置?或者用$_SERVER之类的进行判别? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 做个session判断 提交者的身份不行吗 1.如果能设定数据的访问权限,比如说只有登录会员才可查看,这样会给别人的抓取造成一定难度。但这个障碍总能被解决的。2.分析访问日志,从服务器级别限制可疑IP访问。3.记录每个IP的操作密度,较频繁的可不定时要求输验证码 一个token 或者一个验证码就解决了...或者上面说的产生一个 全局变量 验证一下 用session生成令牌,提交之后验证session,合法则马上注销这个session,确保每次都有一个新的令牌. 除了不友好的验证码之外,没有别的方法不过简单些的验证码也是可以机器识别的你是些AJAX页面,所以验证码也是不能用的可以考虑请求数据部分的 js 代码也是动态产生的这样窃取者如不能动态解析 js 就无法获取数据了 使用验证,加hash。这些hash值绑定时间,(1)设定时间内失效(2)加密方式根据时间日期变化 作为一个长期数据搜集者,很遗憾地告诉你,上面说的方法都能应付但作为php学得比你早,还知道点市场运作知识的人,我给你的建议有下面这些(基于开放数据内容):1.最重要的一点:你要搞清防范的对象,像我这样的人(看最后),你防也没用,也没必要,关键是防你公司的竞争对手2.基于第1点,也没必要做全数据库防范,那是防黑客层面的工作,只需要在关键数据上面做手脚就行了什么是关键数据?对商城来说,价格就是关键数据,淘宝为何不防范?因为不是淘宝自己在卖东西……完毕3.任何的防范工作必然会导致用户体验降低,流失客户的损失和防范少数小偷的得益之间的比较,需要衡量4.真的要防范的话——1) 防机器不防人,区别是什么?前者读代码,后者读文字(肉眼),所以从这点出发最重要2) 基于上面第2点,最好和市场部协同,找对重要数据3) 抓数据有三个步骤:开发爬虫、抓取过程、重组数据,针对增加开发难度,没必要,也没办法;针对抓取增加难度,这个上述第3点说了,慎重对待,最好针对“时间”做文章;最好把着眼点放在重组数据的难度,就是说抓到了也很难用程序重组,这个就要看你的能力了4) 大公司应该从公司层面做对付小偷的工作,例如诉讼,这样更显得公司的大气形象;小公司一般服务对象比较固定,采用“信任”机制会更好,例如一些数据只对特定人员开放……总的来说应该结合商业模型,不要技术部全扛下来补充3)所说的举例方案:A: 如唠叨所说,某些东西用js“拼”出来,直接写出来不行,那还是完整结果;这是因为现在懂调用js引擎运算结果的人还很少B: 以前帮别人做过这样的事——四位数,用N(某数量< N >4,随机)张图片显示,从代码看这N张图片代码完全一致,取回的字节数也接近,但目视只有4张显示出所需要的数字(结合网页底色),当时这个方法使用相当一段时间都有效,但随着OCR的程序越来越简单,这个方法也失效了,但原理还是有用的我抓数据漫无目的(指target),只抓自己有用和喜欢的东西,例如中日韩的邮政编码 、喜欢的图片……,不卖钱不外传也从不帮别人抓,商业数据一点兴趣(用处)也没有,可能去抓还惹来一身骚,后果严重,俺要为人生倒数的几年着想啊最后告诉你,我现在还没法对付的就是——图片瀑布墙 本来想考虑token,hash或者全局变量的,不过听了LS那位大哥的话,心凉了一大截。弱弱的问一句,“图片瀑布墙”是什么? 全局变量怎么设置,有示例吗?另外像firebug之类的可以看到吗?post,get,cookie都看的到…… http://qing.weibo.com/tag/%E6%97%85%E8%A1%8C这个就是图片瀑布墙 补充一下无论你是用 cookie、session还是token都不能达到防范的作用因为检查的是客户端回传的数据与服务端预设的是否一致那么好了,我只要将采集的动作分为两步:1、进入你的ajax页面,你的网站就会把验证的相关数据发给我。因为你的ajax提交也是要验证的2、向目标页发送请求,此时与你的ajax请求是一样携带验证数据的 这些我都知道。我老做这种事了,所有报应来了……言归正传,我知道cookie、session,token都弱的不行,如果是我,我也会分2步走,先采集主页面上的AJAX超链,再模拟POST采集AJAX页面的内容。所以,有没有什么APACHE,PHP的全局变量设置,限制某些页面只允许服务器IP地址,或者URL才能访问? 本帖最后由 PhpNewnew 于 2013-01-10 21:53:39 编辑 在牛b点 每次post 都动态处理 验证 function isAjax() { return $_SERVER ['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'; }处理前先判断一下是不是ajax请求,不是则exit(); 补充一下,因为ajax不能跨域。 http请求头是可以手动构造的!你这个方法不可行,我刚实测了 动态生成session,post时再检查一下。 不是没法,是没简单点的方法,现在是手动抓http请求再发过去,但想找些更加自动的方法(适用于不同站点而不仅是weibo) 最简单而有有效的方法 判断IP在规定时间的访问次数,如果判断是采集过来的IP,直接给他一些垃圾数据。哈哈 他就悲剧了 那要多建立一个IP记录数据库,增加MYSQL负担,总不见得手动查找LOG吧。 如果有人手工跨域提交防不住因为http无状态,不知道你之前的域,一切可以带过去的信息都是可以手工模拟的,比如HTTP_REFERER。倒是机器跨域提交,可以带一个token,token这东西本身不是防止跨域提交,而是防止重复提交的,也就是说同一个post不能提交多次,第二次提交的时候必须变换服务器给出的新token(也就是说必须请求一次某个页面拿到新token)。做个图片验证码之类的可以防住一些机器提交,但是手工提交依旧防不住。如果有人恶意提交数据,搞攻击,还是从服务器上作策略,断了这个ip的tpc链接吧。 汗,不知道PHP6能不能修补掉这个BUG。 这个应该不是bug,而是http的特点。 这个问题只能寄希望于下一版PHP了。 if(preg_match('#domain\.com#i',$_SERVER['HTTP_REFERER'])){}这个行吗? 怎样可以把PHP页面中的包含文件合并到一个文件中? PHP 中你用過這個函數嗎? php中数组p[]表示什么? 下载了phpide-all-in-one-0.1.9-win32,怎么配置服务器并运行PHP程序呀?? 如何设置不让APACHE写日志啊??? 我做了一个网页,为什么大的jpg图片链结不上呢? 发现CSDN重开之后中,少了好多贴,看来是用以前的备份恢复的吧 这个session 的warning是什么意思? 简单问题php的连接 YII框架菜鸟 SESSION问题 求php初学者入门 简明教程 电子教程、视频地址 Apache php配置 the requested operation has failed
2.分析访问日志,从服务器级别限制可疑IP访问。
3.记录每个IP的操作密度,较频繁的可不定时要求输验证码
或者上面说的产生一个 全局变量 验证一下
不过简单些的验证码也是可以机器识别的你是些AJAX页面,所以验证码也是不能用的
可以考虑请求数据部分的 js 代码也是动态产生的
这样窃取者如不能动态解析 js 就无法获取数据了
使用验证,加hash。这些hash值绑定时间,
(1)设定时间内失效
(2)加密方式根据时间日期变化
1.最重要的一点:你要搞清防范的对象,像我这样的人(看最后),你防也没用,也没必要,关键是防你公司的竞争对手
2.基于第1点,也没必要做全数据库防范,那是防黑客层面的工作,只需要在关键数据上面做手脚就行了
什么是关键数据?对商城来说,价格就是关键数据,淘宝为何不防范?因为不是淘宝自己在卖东西……完毕
3.任何的防范工作必然会导致用户体验降低,流失客户的损失和防范少数小偷的得益之间的比较,需要衡量
4.真的要防范的话——
1) 防机器不防人,区别是什么?前者读代码,后者读文字(肉眼),所以从这点出发最重要
2) 基于上面第2点,最好和市场部协同,找对重要数据
3) 抓数据有三个步骤:开发爬虫、抓取过程、重组数据,针对增加开发难度,没必要,也没办法;针对抓取增加难度,这个上述第3点说了,慎重对待,最好针对“时间”做文章;最好把着眼点放在重组数据的难度,就是说抓到了也很难用程序重组,这个就要看你的能力了
4) 大公司应该从公司层面做对付小偷的工作,例如诉讼,这样更显得公司的大气形象;小公司一般服务对象比较固定,采用“信任”机制会更好,例如一些数据只对特定人员开放
……
总的来说应该结合商业模型,不要技术部全扛下来补充3)所说的举例方案:
A: 如唠叨所说,某些东西用js“拼”出来,直接写出来不行,那还是完整结果;这是因为现在懂调用js引擎运算结果的人还很少
B: 以前帮别人做过这样的事——四位数,用N(某数量< N >4,随机)张图片显示,从代码看这N张图片代码完全一致,取回的字节数也接近,但目视只有4张显示出所需要的数字(结合网页底色),当时这个方法使用相当一段时间都有效,但随着OCR的程序越来越简单,这个方法也失效了,但原理还是有用的我抓数据漫无目的(指target),只抓自己有用和喜欢的东西,例如中日韩的邮政编码 、喜欢的图片……,不卖钱不外传也从不帮别人抓,商业数据一点兴趣(用处)也没有,可能去抓还惹来一身骚,后果严重,俺要为人生倒数的几年着想啊最后告诉你,我现在还没法对付的就是——图片瀑布墙
无论你是用 cookie、session还是token都不能达到防范的作用
因为检查的是客户端回传的数据与服务端预设的是否一致那么好了,我只要将采集的动作分为两步:
1、进入你的ajax页面,你的网站就会把验证的相关数据发给我。因为你的ajax提交也是要验证的
2、向目标页发送请求,此时与你的ajax请求是一样携带验证数据的
这些我都知道。我老做这种事了,所有报应来了……言归正传,我知道cookie、session,token都弱的不行,如果是我,我也会分2步走,先采集主页面上的AJAX超链,再模拟POST采集AJAX页面的内容。所以,有没有什么APACHE,PHP的全局变量设置,限制某些页面只允许服务器IP地址,或者URL才能访问?
function isAjax() {
return $_SERVER ['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest';
}处理前先判断一下是不是ajax请求,不是则exit();
补充一下,因为ajax不能跨域。
不是没法,是没简单点的方法,现在是手动抓http请求再发过去,但想找些更加自动的方法(适用于不同站点而不仅是weibo)
那要多建立一个IP记录数据库,增加MYSQL负担,总不见得手动查找LOG吧。
因为http无状态,不知道你之前的域,一切可以带过去的信息都是可以手工模拟的,比如HTTP_REFERER。
倒是机器跨域提交,可以带一个token,token这东西本身不是防止跨域提交,而是防止重复提交的,也就是说同一个post不能提交多次,第二次提交的时候必须变换服务器给出的新token(也就是说必须请求一次某个页面拿到新token)。做个图片验证码之类的可以防住一些机器提交,但是手工提交依旧防不住。
如果有人恶意提交数据,搞攻击,还是从服务器上作策略,断了这个ip的tpc链接吧。
这个应该不是bug,而是http的特点。