jquery+php:发布一小小的网站安全策略,望高手捧场


首先声明,该文为原创,由于我对网站安全知道得很少,所以希望各路高手提出高见,完善我的这个策略。

缘起:jquery是目前用户体验效果最好的插件(暂时不考虑FLASH了,这玩意太笨重,目前的网速还承载艰难。),所以做页面的时候,往往使js或者jquery做前端,达到良好的用户体验。php之类做后台。

但问题是,前台的JS很容易绕过。所以从页面采集来的数据,还需要php重新过滤。如一个注册页面需要采集邮编。则出现这样的情况:
用户输入的数据——JS正则判断(前端)——php正则判断(后台)——交互数据库。

这里,连用两种语言的正则,而且是必须的。功效重复,使得网站代码量变大。如果需要采集的数据量很多,从姓名到地址到电话到QQ一直到三姑妈的二儿子的女友的爸爸的名字,总之一大堆input select radio等等,这时候,前端的JQUERY自然很大,而后台PHP分析处理的数据很大,偏偏在这样处理表单的功能上,php不如JS简洁高效。

所以我想了个小办法。后台php不再进行数据分析过滤,一切都交给jquery来进行。为了防止用户绕过jquery,输入恶意代码。我在数据库增加一个表。表中记载前台表单action的值,或者说表单处理php文件地址(绝对路径和相对路径)在,暂时其名form_path。

然后再表单页面,新增一个session,用来存贮页面地址。

当表单提交,这个session值不等于form_path时,退出。如此,可以强迫用户使用jquery写成的表单输入页面。绕过JS处理的应该是伪造的表单,所获得的session值自然不符),如此,我在php处理页面,可以大胆直接post,不需要再过滤数据,节省了很多代码。

OVER

大家觉得这个策略有什么漏洞?还有什么需要改进的?

36 个解决方案

#1


无论前台怎么做,数据合法性检测,服务器端不可省

#2


http://topic.csdn.net/u/20101007/23/90d1bd3d-9b28-4710-ae1d-f7e795d094b3.html?95533
这帖子有人发了个php的curl模拟提交数据,有类似的方法,就可以将任意数据提交给你


很多语言都可以办到类似的效果。如果需要安全性,服务器端一定要检测

#3


记得有人说过,不要相信任何用户输入的数据,所以,服务器的验证是必须的,客户端的验证是辅助的

#4


session 与客户端无无关,所以不知道楼主的思路的依据是什么

#5


很好啊  。。。

#6


一切输入都是危险的,所以最好不要省略服务器端的验证,前端JS验证只是为浏览者提供一个更好的体验。

#7


楼主的思路其实根本用不着写数据库的,你在表单页生成一个SESSION,值随机,通过隐藏表单提交到数据处理页,将接收到的该值与SESSION值比较是否相同即可。这个方法我也不知道用什么可以绕过,但怀疑一切客户提交的数据,服务器端还是要验证

#8


客户端是为了体验,服务端是为了安全。

#9


该回复于2010-12-03 11:52:50被版主删除

#10


一切来自客户端的变量都是有害的。LZ犯了很常见的错误。

#11


该回复于2010-12-08 10:32:10被版主删除

#12


引用楼主 zilingzhi 的回复:
首先声明,该文为原创,由于我对网站安全知道得很少,所以希望各路高手提出高见,完善我的这个策略。

缘起:jquery是目前用户体验效果最好的插件(暂时不考虑FLASH了,这玩意太笨重,目前的网速还承载艰难。),所以做页面的时候,往往使js或者jquery做前端,达到良好的用户体验。php之类做后台。

但问题是,前台的JS很容易绕过。所以从页面采集来的数据,还需要php重新过滤。如一个注册……



听起来似乎只要把javascript禁用了就可以绕过了

#13


其实只要用firebug就能绕过你的方法

#14


大体上关于安全上的问题,上面几位都说清楚了~
前端只不过是体验问题,后台的验证是必需。
绕过前端到发数据这个,其实LZ已经有正确的思路。
做法可以查考php框架,如Thinkphp。

LZ这句话我还是要说一说的:暂时不考虑FLASH了,这玩意太笨重,目前的网速还承载艰难。
其实不笨重,只要好好利用其特性,网速根本不是什么问题。

#15


该回复于2010-10-23 10:00:48被版主删除

#16


我抓包,改数据,可以么?

#17


引用 8 楼 luciferstar 的回复:
客户端是为了体验,服务端是为了安全。


精辟。

#18


引用 8 楼 luciferstar 的回复:
客户端是为了体验,服务端是为了安全。

赞同

#19


一切客户端的输入都不可信,我可是深有体会,有时即使服务器端采用一些安全措施,也不一定安全啊。

#20


不可取,因为js,session 也不安全 js很容易被绕过。。

直接用数据模拟 IE体检 啥东东都插入你的数据库了,很不安全

多些点代码 测试下 没什么不好!

#21


如果不在服务器端进行验证的话,感觉安全基本不可以保证啊,关于建一个表,把Session中的值隐藏放到页面上,那用户查看下源文件,你那个判断的值是什么一目了然,然后自己伪造一个页面,你根本管不了啊~~~

#22


请问这个正则能不能保证在有JS验证情况下的提交安全?

preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) == preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST']))

#23


验证表单信息,可以用jquery的验证插件 ajax到服务端验证,用户体验又好,又安全.

#24


引用 14 楼 lpreterite 的回复:
大体上关于安全上的问题,上面几位都说清楚了~
前端只不过是体验问题,后台的验证是必需。
绕过前端到发数据这个,其实LZ已经有正确的思路。
做法可以查考php框架,如Thinkphp。

LZ这句话我还是要说一说的:暂时不考虑FLASH了,这玩意太笨重,目前的网速还承载艰难。
其实不笨重,只要好好利用其特性,网速根本不是什么问题。



是啊,好像Jquery也以运行效率低著称吧。

#25


引用 1 楼 amani11 的回复:
无论前台怎么做,数据合法性检测,服务器端不可省
UP~但可以判断用户是否是直接访问后台的 httpreferer

#26


你这想法我在刚毕业那会曾经有过!!
从楼主看到我N年前的影子啊!!很好很天真!

#27



可以的...session加域名判断..

#28


后台不判断输入是不行的    呵呵   

#29


该回复于2010-11-03 13:25:59被版主删除

#30


试验了一些,目前我自己绕不过去,询问一下,高手们怎么绕进去。

网站域名:www.abcd.com

数据提交页(即表单所在页):a.htm  
程序思路:用session记录下两个值,
一个是设定好的值C=www.abcd.com/a.htm;(限定数据只能来源于该页面)
另一个是读取当前页面地址的值D。
当值D不等于值C时,退出。

数据处理页:b.php

当值D等于值C时,转入该页面b.php。

b.php预设一个session,值E=www.abcd.com/a.htm ,当值E等于值D时,写入数据库。

大概如此。

#31


只前台验证?
绕过前台验证的方法有N个.
安照你的思路,跟本不用打开你的任何页面,用curl直接给你的程序处理页发数据就行了.

#32


该回复于2010-11-09 13:16:50被版主删除

#33


不要意味多写那么几段代码就以为效率会低的不行.你所考虑的那几个问题完全可以忽略不记.
太钻牛角尖了,有时会束缚自己滴!!

#34


应多方面想想。。。。。

#35


看你的项目需要多大的安全性了,一般用了session验证也差不多了

#36


多谢捧场,没有什么分。发每人一分都不够 汗
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告