关于避免审查元素时,修改数据和提交数据,造成恶意审查修改的方法总结


作为一名程序员或者用户,都知道在浏览器审查元素时,是可以修改数据的,如果修改数据,在提交就会造成不可预想的后果,特别是在数据安全的领域。一般查询数据都会返回记录的id,和一些关键的信息,虽然这些信息不是显然地在前端显示出来,但是一般会隐藏在input框或者一个data-的属性中,在修改,删除记录时,把id以get或者post的形式将数据传递给服务端,诺任意修改了id的值,就会恶意误删数据(可能是别人的数据也可能是自己的数据),所以必须要进行有效的避免。

本人总结两个方法,通过多层验证,防止恶意修改数据提交。

(1)对于返回来的数据,比如删除,有一个链接http://host/delete?id=2&states=1,如果用户恶意修改id的值,改为3,然而我们没有做任何的处理,直接讲述get过去,发生的后果就是会删除一条不该删除的数据,造成一个很严重的后果。但是如果是正常点击删除的话,是不会有什么问题的。所以我们必须要避免这种情况

解决方法:在返回数据时,将关联的数据MD5加密,作为一个密钥key值返回,在服务端生成一个key=md5($id.$states),同时将key值也返回。则链接变成http://host/delete?id=2&states=1&key=es...rf。所以将数据传递过去的时候,会把值传过去的。在后端再比较key的值。

if(md5($id.$states)===$key){
    do something
}else{
  die('错误');
}

(2)返回来的数据如果通过ajax提交,则可以在前端判断一次,在服务端在判断一次,因为高手是可以绕开前端的js的。同样是要在后端将关联的数据创建成一个密钥,同时在前端判断时,需要引入一个MD5.js的文件,用于前端MD5函数
$('button.btn-video-loadmore').on('click',function(){
		var page=$(this).attr('data-page');
		var type=$(this).attr('data-type');
		var key=$(this).attr('data-key');
		if(hex_md5(page+type)==key){
			var data={
				'page':page,
				'type':type
			};
			$.post('__CONTROLLER__');
		}else{
			alert('加载失败!');
		}
	});
同时在服务端也得向方法一一样进行验证。

你可能感兴趣的:(js前端,php)