【问题标题】:Make a link non-secure使链接不安全
【发布时间】:2012-02-24 19:34:06
【问题描述】:

我有一个如下的 JavaScript 链接:

<a href="#" onclick="window.open('TrackPackage.asp?track=235&ship=OTHER&ShippingMethod=1', '', 'location=1,menubar=1,scrollbars=1,status=1,resizable=1,width=635,height=460'); return false;">
<span class="PageText_L288n">TRACK YOUR PACKAGE</span>
</a>

但是,它是从一个安全页面链接的,所以它变成了一个安全页面。不幸的是,这给我带来了一个问题,因为当他们到达页面时会自动提交不安全的表单。他们收到提示:此表单提交不安全。这些页面上没有任何敏感数据,所以我真的不需要首先保护页面。 HTML 或 JavaScript 中是否存在可能使链接不安全的属性。我无法真正修改链接本身,因为它是动态链接。

但是,我相信一些 jQuery 可以在 TrackPackage.asp 之前添加 http://www.example.com/。我想这是可以接受的,但我更喜欢某种只会使链接不安全的属性。谢谢

【问题讨论】:

  • 你让我很困惑,哪个页面在 HTTPS,哪个不是。通常,您可以通过始终链接到 HTTPS-url 来避免安全警告(但显然,您必须指定该 TrackPackage.asp 的完整 URL)。或者,使用无协议 URL(例如“//google.com”),因为这应该通过与调用页面相同的协议打开引用的 URL。不相关,如果你使用&lt;a href="TrackPackage.asp" target="_blank"&gt;click me&lt;/a&gt; 会更友好,因为这会打开新窗口/标签,没有被弹出窗口阻止程序阻止的风险(只是一个想法;我讨厌弹出窗口)。
  • @Hari 调用页面是 HTTPS,我试图让 TrackPackage.asp 页面成为 HTTP。我无法修改链接,所以我必须使用 JavaScript 或 jQuery
  • 协议是在URL中指定的,所以在URL的开头加上domain是解决这个问题的最好办法。没有属性可以改变协议。
  • 当然你可以修改链接——在你收到来自第 3 方的 HTML 之后,你至少有一次这样做的机会——例如使用 js+jquery 更改链接的属性和所有你想要的。我从未见过有关 HTTPS-to-HTTP 的浏览器警告;我看到了相反的情况。但是,无论如何,您可以更改 URL(以及协议),即使它是有条件的(http 或 https 取决于某些东西)。
  • @Hari 好的,所以我对 jQuery 的了解非常有限。如何将http://www.example.com 添加到 URL 的开头?

标签: javascript jquery url hyperlink anchor


【解决方案1】:

您可能会尝试覆盖本机功能。但是在某些可能无法工作的浏览器中(没有找到这样的浏览器,所以假设它在所有,至少是主要的浏览器中都可以工作:)):

var windowOpen = window.open;
window.open = function(url, name, settings) {
    var url = 'http://www.example.com/' + url;
    alert("New url = " + url);
    windowOpen(url, name, settings);  
}

如果您想为选定的链接类别执行此操作,则可以这样做(将 onclick 属性修改为文本字符串的想法不是最好的)

<script>
var windowOpen = window.open, clicked = false;
window.open = function(url, name, settings) {
    if (clicked) var url = 'http://www.example.com/' + url;
    alert("New url = " + url);
    windowOpen(url, name, settings);  
}
$(document).ready(function(){
   $('span.packagetracklink').click(function(){
        clicked = true;
        setTimeout(function(){clicked = false;}, 200);  
   });
});
</script>
<a href="#" onclick="window.open('some_url', '', ''); return false;">
<span class="packagetracklink">TRACK YOUR PACKAGE</span>
</a><br>
<a href="#" onclick="window.open('some_url', '', ''); return false;">
<span class="another_class">TRACK YOUR PACKAGE</span>
</a>

【讨论】:

  • 完美,如何仅在特定锚点上调用它?
  • span.packagetracklink的父锚点
  • @user1090389 没有办法做到这一点。被覆盖的函数不知道它是从哪个元素调用的。网址有区别吗?
  • 我希望这个 JavaScript 只在特定链接上调用 jQuery 不允许我这样做?
  • @user1090389 可以做一些事情,使脚本适应您的要求。将 onclick 属性修改为文本并不是最好的方法。
【解决方案2】:

如果您在 window.open 中使用它之前动态接收 .asp 页面,您可以只进行字符串替换以将 URL 中的“https”替换为“http”协议,或者如果有任何协议,添加if开头的“http”。

我没有尝试过这个,因为我没有 https 页面可以玩,但我认为它可以工作。

【讨论】:

    【解决方案3】:

    您需要先以某种方式获取该 A 标记的实例。它没有 ID 或 CLASS,所以你自己在那里(除非你粘贴父元素代码和兄弟代码,至少是 sn-ps。

    var link = $("a"); // I don't have enough info to tell you how to precisely get this instance
    var originalOnClick = link.attr("onclick");
    var part1 = "window.open('"; // this is always the same, right?
    var part2 = originalOnClick.substr(part1.length); // the remainder, beginning with TrackPackage.asp
    var newOnClick = part1 + "http://www.example.com/" + part2;
    
    link.attr("onclick", newOnClick);
    

    还有其他方法可以将字符串常量注入现有字符串,但这应该可行 - 如果我对您足够了解的话。

    【讨论】:

    • 我不知道为什么,但这个解决方案不起作用......我更喜欢使用你的解决方案,因为我可以选择要更改的链接。
    • 粘贴父元素代码和兄弟元素代码,这样我就可以看到如何选择那些a-tags。或者,如果您在 javascript 中以字符串/文本的形式接收该标记,那么试试这个 - 假设:var html = "&lt;a onclick=\"...\"&gt;&lt;/a&gt;";,尝试:var link = $("a:first", html);。然后从上面代码的第 2 行继续。
    • 嗨,我遇到了 Cheery 的代码问题,我想知道你的脚本是否可以使用 jQuery 1.4.2,因为我知道这是问题所在......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2018-04-07
    • 2016-04-14
    • 2018-05-17
    • 2021-12-16
    • 2013-07-14
    相关资源
    最近更新 更多