首先声明,该文为原创,由于我对网站安全知道得很少,所以希望各路高手提出高见,完善我的这个策略。
缘起: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 个解决方案
http://topic.csdn.net/u/20101007/23/90d1bd3d-9b28-4710-ae1d-f7e795d094b3.html?95533
这帖子有人发了个php的curl模拟提交数据,有类似的方法,就可以将任意数据提交给你
很多语言都可以办到类似的效果。如果需要安全性,服务器端一定要检测
记得有人说过,不要相信任何用户输入的数据,所以,服务器的验证是必须的,客户端的验证是辅助的
session 与客户端无无关,所以不知道楼主的思路的依据是什么
一切输入都是危险的,所以最好不要省略服务器端的验证,前端JS验证只是为浏览者提供一个更好的体验。
楼主的思路其实根本用不着写数据库的,你在表单页生成一个SESSION,值随机,通过隐藏表单提交到数据处理页,将接收到的该值与SESSION值比较是否相同即可。这个方法我也不知道用什么可以绕过,但怀疑一切客户提交的数据,服务器端还是要验证
一切来自客户端的变量都是有害的。LZ犯了很常见的错误。
大体上关于安全上的问题,上面几位都说清楚了~
前端只不过是体验问题,后台的验证是必需。
绕过前端到发数据这个,其实LZ已经有正确的思路。
做法可以查考php框架,如Thinkphp。
LZ这句话我还是要说一说的:暂时不考虑FLASH了,这玩意太笨重,目前的网速还承载艰难。
其实不笨重,只要好好利用其特性,网速根本不是什么问题。
一切客户端的输入都不可信,我可是深有体会,有时即使服务器端采用一些安全措施,也不一定安全啊。
不可取,因为js,session 也不安全 js很容易被绕过。。
直接用数据模拟 IE体检 啥东东都插入你的数据库了,很不安全
多些点代码 测试下 没什么不好!
如果不在服务器端进行验证的话,感觉安全基本不可以保证啊,关于建一个表,把Session中的值隐藏放到页面上,那用户查看下源文件,你那个判断的值是什么一目了然,然后自己伪造一个页面,你根本管不了啊~~~
验证表单信息,可以用jquery的验证插件 ajax到服务端验证,用户体验又好,又安全.
你这想法我在刚毕业那会曾经有过!!
从楼主看到我N年前的影子啊!!很好很天真!
试验了一些,目前我自己绕不过去,询问一下,高手们怎么绕进去。
网站域名: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时,写入数据库。
大概如此。
只前台验证?
绕过前台验证的方法有N个.
安照你的思路,跟本不用打开你的任何页面,用curl直接给你的程序处理页发数据就行了.
不要意味多写那么几段代码就以为效率会低的不行.你所考虑的那几个问题完全可以忽略不记.
太钻牛角尖了,有时会束缚自己滴!!
看你的项目需要多大的安全性了,一般用了session验证也差不多了