【问题标题】:Javascript security stopping me?Javascript 安全阻止我?
【发布时间】:2011-10-22 01:55:54
【问题描述】:

我很确定这是一个安全问题阻止我这样做,但我想知道是否有我不知道的解决方法...

我有一个脚本可以将用户的电子邮件注入我客户的联系人数据库,它在 IE 中被轰炸,但在 FF、Chrome 中工作(像往常一样)。只是想知道我是否可以将服务器添加到信任中或使其正常工作?

<script type="text/javascript">

    window.onload = init;

    //Global XMLHTTP Request object
    var XmlHttp;
    function CreateXmlHttp() {
        //Creating object of XMLHTTP in IE
        try {
            XmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            try {
                XmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (ex) {
                XmlHttp = null;
            }
        }
        //Creating object of XMLHTTP in Mozilla and Safari
        if (!XmlHttp && typeof XMLHttpRequest != "undefined") {
            XmlHttp = new XMLHttpRequest();
        }
    }

    function init() {
        var x = document.getElementsByName("btnContinue");
        x[0].onclick = submitForm;
    }

    function submitForm() {
        var x = document.getElementsByName('Email');
        if (x[0].value.length > 0) {
            CreateXmlHttp();
            XmlHttp.open("POST", "https://app.icontact.com/icp/signup.php", false);
            XmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            XmlHttp.send("redirect='http://www.xyz.com/articles.asp?ID=97'&errorredirect='http://www.xyz.com/articles.asp?ID=256'&fields_email=" +
                x[0].value + "&listid=123&specialid:123=YP7I&clientid=123&formid=123&reallistid=1&doubleopt=0&Submit=Submit");
        }
    }

</script>

如果有任何见解,我将不胜感激。

谢谢!

【问题讨论】:

  • 使用 ajax 的代码会少很多 api.jquery.com/jQuery.ajax
  • 看起来可能是同源策略问题。如果您有权访问app.icontact.com,您可以尝试设置 Access-Control-Request-Headers 以允许您的域发出 POST 请求。
  • 我有点受限,因为我正在处理一个我真的无法控制的页面。该页面托管在那些仅允许通过页面上的预定义区域注入代码的第 3 方站点构建器之一……有点破解它。所以我真的不能创建新表单或导入库,除非它们都被隐藏起来。我应该注意到这在 Firefox 中工作得很好。只在 IE 中轰炸。
  • 哪个版本的IE?我认为只有 XMLHttpRequest 遵守 Access-Control-Request-Headers,这意味着如果 IE 不使用它们,它将违反同源策略并且无法正常工作。

标签: javascript post xmlhttprequest


【解决方案1】:

我的第一个建议是尝试创建XMLHttpRequest之前 ActiveX 对象。 IE7 及更高版本确实像其他浏览器一样支持 AJAX。

接下来,您应该在open() 方法中使用相对路径。尽管我认为您的问题是需要能够在任何站点上运行的东西?在这种情况下,我建议创建一个表单和一个 iframe 并使用“旧”方法。

【讨论】:

    【解决方案2】:

    这是一个同源策略问题。可以设置允许访问内容标头,但 IE ActiveXObject 不会使用它们。 XMLHttpRequests 遵循标头,并且可以在支持它们的浏览器上工作。

    看到这个问题: AJAX Permission Denied On IE?

    虽然看起来他们没有找到兼容 IE 的跨域 POST 的解决方案...

    如果您可以通过您的网络服务器代理它(向您的服务器发出 POST),并让服务器发出 POST,那么您的问题就会得到解决。

    【讨论】:

      【解决方案3】:

      在新浏览器上,如果您请求的页面上有一个特殊的 HTTP 标头,则可以使用跨域 XHR。 http://ejohn.org/blog/cross-site-xmlhttprequest/

      或者你可以使用动态脚本加载。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多