前几天,我正在为一个客户的电子商务网站工作,遇到一个非常令人担忧的问题。 在结账的最后一步,当您按下最后一个按钮提交订单时,浏览器会弹出一个安全警告,告诉用户该页面是安全的,但发送的数据不是。
这可不是人们在网上购物时想看到的东西。
经过一番调查发现,浏览器并没有杞人忧天,它在正常工作。 该页面本身是合法的安全页面,但表单的操作 URL 提交到了一个非安全 URL。
我对这个购物车比较熟悉,但我费了很大的劲,却找不到修改这个 URL 的代码。 我提交了一个支持请求,但他们却毫无帮助,把责任推到了我對购物车的自定义修改上(不可能)。 所以…… 我需要一种更好的方法来强制那个 URL 变得安全。
用 JavaScript 强制安全
当然,这不是完美的解决方案,这应该在购物车核心级别完成,但有时你只需要一个解决方案,这样你才能继续你的生活。 以下是我用 jQuery JavaScript 完成此操作的方法
$(function(){
var $form = $("form#specificForm");
var newAction = $form.attr("action");
newAction = newAction.replace(/http/,"https");
$form.attr("action", newAction);
});
通俗易懂的解释
- 缓存选择器,因为我们会使用它不止一次
- 将一个变量设置为操作 URL
- 用“https”替换字符串中的“http”部分
- 更改表单上的属性
完成任务……
然后你使用 greasemonkey 应用脚本吗?
不,它与页面中添加的任何其他 JavaScript 一样包含在内,因此它会影响每个人。
关于它的一点快速说明。 不确定 jQuery $() 是否执行文档就绪检查,但它必须在表单呈现后运行。 因此,不要在页面的顶部包含此代码,除非使用 $(document).ready(..function..)。
不错的帖子,Chris!
我认为它会。 据我所知,$(function() 部分是文档就绪内容的简写。
是的,包装在 $(function() { … }); 中的 JavaScript 在页面完全加载后运行。
Andrew
不,它不会在页面完全加载时运行,它会在 DOM 准备好进行操作时运行(在某些情况下,这可能与 onload 事件重合)。 对于它运行,图像/iframe/脚本/样式表不必加载。
不错的变通方法,但对于禁用 JavaScript 的人来说,解决方案是什么?
没有,这就是它不完美的原因。 完美的解决方案是让购物车在里面放上正确的 URL!
没错。 哪个购物车在做这个,因为支持听起来有点平淡。
如果它是 php 购物车,也许你可以将操作(或者可能是整个操作)包装在一个在服务器端进行搜索/替换的函数中。
这样你就不必强迫你的用户启用 JavaScript。
(或者可能是整个< form > 标签)
这可以通过编辑购物车软件本身来实现,但我假设 Chris 不想搜索创建功能丰富的购物车的海量代码。 这绝不是完美的解决方案,但这是一个值得一提的快速解决方法。
Andrew
你应该将其更改为
newAction = newAction.replace(/http:/,”https:”);
这样现有的安全表单就不会破坏到 httpss
:)
酷,感谢你的改进,Nathan。 幸运的是,对于这个表单来说,它针对的是特定 ID 的表单,所以不会有问题,但我还是更新了。
请记住,如果有人复制并粘贴此代码,请将代码中的弯引号更改回直引号。