web前端如何做签名验证,来保证请求不会被伪造.

xianyushen 2016-10-24 03:08:58
我正在做一个网页商城的项目.现在在验证签名这里遇到了一些问题,希望各位前辈能给予提示或者指正.

商城在生成订单的时候,会有一个订单号.根据这个订单号为参数,在后台做一些逻辑操作,比如更改价格,支付之类的.这个订单号是直接加载url后面作为参数传递给服务器的.虽然传输利用了SSL加密(走的https),后台也进行了session判断.但是为了寻求更高的安全性,以及对某些操作的url设置有效时间,打算在url后面加上sign签名验证的方法.

我现在的想法是这样的,每个url后面都加上当前的时间戳和sign值,在请求中作为参数发送给服务器.服务器首先判断时间戳,如果距离当前时间超过10分钟则判断这个请求已经过期,需要重新发送请求.

但是我不知道前端的sign值如何获取.以前做app的时候,sign可以按照MD5(订单号+用户ID+时间戳+其他盐)的方式,在app内部完成,外部无法看到具体的加密方法.但是现在这个前端几乎全部是开放的,用JS做加密别人也能看到.

我也想让前端直接从服务器获取现成的sign签名,但是同样的.这个请求sign签名的url也无法验证用户的唯一性,数据的准确性.别人改下url中的订单号,照样能拿到新订单号对应的sign值.

以上是我疑惑的地方,恰恰这安全性又是特别重要,还望各位前辈能指点二三.
...全文
5186 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
davidhardson 2020-11-03
  • 打赏
  • 举报
回复 1
引用 9 楼 尔卿 的回复:
你好,你加时间戳的话,你到后台去的时候,后台接收到你的请求的时候也是过了一会儿啊,关键是我的担心 是,你加了时间戳,但是别人能看到你的前端加密方式,能看到你的代码,不是照样可以根据你的加密方法,来生成同样的签名,照常请求
前端的安全性本来就是 相对 的。一般都要混淆一下代码。做的严谨一点,可以在登陆时由服务器端下发公钥,前端使用公钥进行签名,服务器端用私钥解。公钥每过一段时间自动过期,过期后前端重新发请求获取新的公钥。这样就算对方知道算法,在前端伪造请求也很麻烦。获取公钥的请求也可以绕几个弯做几个验证。当然硬要破解也是可以的,WEB端没有绝对的安全。
尔卿 2020-09-10
  • 打赏
  • 举报
回复
你好,你加时间戳的话,你到后台去的时候,后台接收到你的请求的时候也是过了一会儿啊,关键是我的担心 是,你加了时间戳,但是别人能看到你的前端加密方式,能看到你的代码,不是照样可以根据你的加密方法,来生成同样的签名,照常请求
davidhardson 2020-03-18
  • 打赏
  • 举报
回复
引用 7 楼 尔卿 的回复:
我今天也是遇到一个问题,登录了一个网站,没法用接口去批量请求,因为他的参数中总是有一个动态参数,同一个接口,刷新一下,那个值又变了,就是没有搞明白,前端生成的这个值,在后台如何去验证
根据时间戳加签了。时间戳肯定要传到后台,后台再根据约定好的算法和接收到的时间戳 进行 验签。
尔卿 2020-03-10
  • 打赏
  • 举报
回复
我今天也是遇到一个问题,登录了一个网站,没法用接口去批量请求,因为他的参数中总是有一个动态参数,同一个接口,刷新一下,那个值又变了,就是没有搞明白,前端生成的这个值,在后台如何去验证
u011144154 2017-11-22
  • 打赏
  • 举报
回复
请问题这个问题有解了么,我也遇到同样的问题
vim_vim 2017-11-15
  • 打赏
  • 举报
回复
各种语言都有库,来伪造http的头,用https解决问题。
mirrorspace 2017-11-15
  • 打赏
  • 举报
回复
前端浏览器内的东西在发送前不都是可以伪造的吗
sinat_34708458 2017-11-14
  • 打赏
  • 举报
回复
楼上说的很对,抛开SSL 其他的前端加密其实都是不安全的
qq_348070857 2016-12-01
  • 打赏
  • 举报
回复
对于sign这种签名 依赖的就是用户正常登陆成功 对参数进行签名 抛开https的话 这一层的安全其实都是不安全的
JWT应用场景? 主要用于身份认证 1、相比xml而言json格式简单,jwt中已经有了你需要的全部信息,拿出来用就行。 2、同session相比,性能更好一些,省去了处理分布session的问题;对于大行其道的restful来讲,支持得很好;浏览器+app+pc,这种多终端开发,是很好的选择。 如果可以,新系统不再使用session保存用户信息。对于我们自己的platina开发平台,可以平滑过渡到jwet,让开发人员感觉不到。 JWT有什么好处? 1、支持跨域访问: Cookie是不允许垮域访问的,这一点对Token机制是不存在的,前提是传输的用户认证信息通过HTTP头传输. 2、无状态(也称:服务端可扩展行):Token机制在服务端不需要存储session信息,因为Token 自身包含了所有登录用户的信息 4、更适用CDN: 可以通过内容分发网络请求你服务端的所有资料(如:javascript,HTML,图片等),而你的服务端只要提供API即可. 5、去耦: 不需要绑定到一个特定的身份验证方案。Token可以在任何地方生成,只要在你的API被调用的时候,你可以进行Token生成调用即可. 6、更适用于移动应用: 当你的客户Duan是一个原生平台(iOS, Android,Windows 8等)时,Cookie是不被支持的(你需要通过Cookie容器进行处理),这时采用Token认证机制就会简单得多。 7、CSRF:因为不再依赖于Cookie,所以你就不需要考虑对CSRF(跨站请求伪造)的防范。 8、性能: 一次网络往返时间(通过数据库cha询session信息)总比一次HMACSHA256计算 的Token验证和解析要费时得多. 9、不需要为登录页面特殊处理: 如果你使用Protractor 功能测试的时候,不再需要为登录页面特殊处理. 10、基于标准化:你的API可以采用标准化的 JSON Web Token (JWT). 这个标准已经存在多个后端库(.NET, Ruby, Java,Python, PHP)和多家公司的支持(如:Firebase,Google, Microsoft). 11、避免因Cookie本地泄露导致的客户风险,由于用HTTP协yi头来传输JWT令牌,不会在客户电脑存储cookie信息。 12、有效降低sql数据库的压力,关键非安全的用户信息可以直接存储与JWT中,下次请求时只需要读取JWT中的数据,不必再去sqlcha询。 注意事项:本模块中生成的JWT令牌中的body区域的内容,前端只需要base64解码就可以获得body区的json,但是由于JWT的特殊构造,sign区的加密采用sha256加密,基本无需担心令牌伪造。 模块中包含了一些其他常见算法,如sign签名校验

39,084

社区成员

发帖
与我相关
我的任务
社区描述
HTML5是构建Web内容的一种语言描述方式。HTML5是互联网的下一代标准,是构建以及呈现互联网内容的一种语言方式.被认为是互联网的核心技术之一。
社区管理员
  • HTML5社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧