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

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

缘起: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

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

...全文
436 点赞 收藏 36
写回复
36 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zilingzhi 2010-12-24
多谢捧场,没有什么分。发每人一分都不够 汗
回复
lonelyarcher 2010-11-09
看你的项目需要多大的安全性了,一般用了session验证也差不多了
回复
toulanggejiguang 2010-11-08
应多方面想想。。。。。
回复
jykgps 2010-11-08
不要意味多写那么几段代码就以为效率会低的不行.你所考虑的那几个问题完全可以忽略不记.
太钻牛角尖了,有时会束缚自己滴!!
回复
jykgps 2010-11-08
只前台验证?
绕过前台验证的方法有N个.
安照你的思路,跟本不用打开你的任何页面,用curl直接给你的程序处理页发数据就行了.
回复
zilingzhi 2010-11-08
试验了一些,目前我自己绕不过去,询问一下,高手们怎么绕进去。

网站域名: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时,写入数据库。

大概如此。
回复
yotianya 2010-11-02
后台不判断输入是不行的 呵呵
回复
在-云端 2010-11-01
你这想法我在刚毕业那会曾经有过!!
从楼主看到我N年前的影子啊!!很好很天真!
回复
Abin-2008 2010-11-01

可以的...session加域名判断..
回复
zlxadhkust 2010-10-29
[Quote=引用 14 楼 lpreterite 的回复:]

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

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


是啊,好像Jquery也以运行效率低著称吧。
回复
君望永远 2010-10-29
[Quote=引用 1 楼 amani11 的回复:]

无论前台怎么做,数据合法性检测,服务器端不可省
[/Quote]UP~但可以判断用户是否是直接访问后台的 httpreferer
回复
若非零落 2010-10-27
请问这个正则能不能保证在有JS验证情况下的提交安全?

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

回复
jlzan1314 2010-10-27
验证表单信息,可以用jquery的验证插件 ajax到服务端验证,用户体验又好,又安全.
回复
echoloyuk 2010-10-26
如果不在服务器端进行验证的话,感觉安全基本不可以保证啊,关于建一个表,把Session中的值隐藏放到页面上,那用户查看下源文件,你那个判断的值是什么一目了然,然后自己伪造一个页面,你根本管不了啊~~~
回复
xk82180316 2010-10-26
不可取,因为js,session 也不安全 js很容易被绕过。。

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

多些点代码 测试下 没什么不好!
回复
hzhsky1985 2010-10-26
一切客户端的输入都不可信,我可是深有体会,有时即使服务器端采用一些安全措施,也不一定安全啊。
回复
k1060220963 2010-10-25
[Quote=引用 8 楼 luciferstar 的回复:]

客户端是为了体验,服务端是为了安全。
[/Quote]
赞同
回复
[Quote=引用 8 楼 luciferstar 的回复:]

客户端是为了体验,服务端是为了安全。
[/Quote]

精辟。
回复
test01000 2010-10-23
我抓包,改数据,可以么?
回复
帕奇式 2010-10-21
大体上关于安全上的问题,上面几位都说清楚了~
前端只不过是体验问题,后台的验证是必需。
绕过前端到发数据这个,其实LZ已经有正确的思路。
做法可以查考php框架,如Thinkphp。

LZ这句话我还是要说一说的:暂时不考虑FLASH了,这玩意太笨重,目前的网速还承载艰难。
其实不笨重,只要好好利用其特性,网速根本不是什么问题。
回复
加载更多回复
相关推荐
发帖
PHP
创建于2008-08-27

1.9w+

社区成员

“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
申请成为版主
帖子事件
创建了帖子
2010-10-15 04:31
社区公告
暂无公告