通过 AJAX/PHP 进行 Javascript 全局错误处理:将日志限制为我自己的脚本

2024-01-12

我有一个脚本可以检测我网站上的 Javascript 错误并将其发送到我的后端进行报告:

<script>
window.onerror = function(msg, url, line, col, error){

    msg   = msg || '';
    url   = url || '';
    line  = parseInt(line || 0);

    // Note that col & error are new to the HTML 5 spec and may not be supported in every browser.
    col   = parseInt(col || 0);
    error = error || '';

    try
    {
        // Ajax Request for IE 5.5+, Firefox, Opera, Chrome, Safari XHR object
        var x = new (this.XMLHttpRequest || ActiveXObject)('MSXML2.XMLHTTP.3.0');
        x.open('POST', '/log.php', 1);
        x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
        x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        x.send('msg='+encodeURIComponent(msg)+'&url='+encodeURIComponent(url)+'&line='+line+'&col='+col+'&error='+encodeURIComponent(error));

        x.onreadystatechange = function()
        {
            if( (x.readyState > 3) && (x.status > 0 && x.status < 400))
                window.console && console.log(x.responseText);
        };
    }
    catch(e)
    {
        window.console && console.log(e);
    }

    return true;
};
</script>

我有一个服务器端 php 脚本,它将侦听 Ajax 请求并写入日志文件

<?php

if( $handle = fopen('log.txt', 'a') ) {

    $log = date('d/m/Y H:i:s').PHP_EOL;

    if( isset($_REQUEST['msg']) )
         $log .= 'msg:'.$_REQUEST['msg'].PHP_EOL;

    if( isset($_REQUEST['url']) )
         $log .= 'url:'.$_REQUEST['url'].PHP_EOL;

    if( isset($_REQUEST['line']) )
         $log .= 'line:'.$_REQUEST['line'].PHP_EOL;

    if( isset($_REQUEST['col']) )
         $log .= 'col:'.$_REQUEST['col'].PHP_EOL;

    if( isset($_REQUEST['error']) )
         $log .= 'error:'.$_REQUEST['error'].PHP_EOL;

    $log .= '---------------------------------------------'.PHP_EOL;

    fwrite($handle, $log);

    fclose($handle);

    echo 1;

} else {
    echo 0;
}

如果页面中出现 javascript 异常,例如:

<script> call_undefined_function(); </script>

写入日志文件...

25/10/2014 11:31:08
msg:ReferenceError: call_undefined_function is not defined
url:http://www.test.it/
line:46
col:1
error:ReferenceError: call_undefined_function is not defined
---------------------------------------------

一切都运转良好!

But,我发现很多由用户使用的插件、工具栏、蠕虫或浏览器扩展引发的日志......

eg

24/10/2014 10:20:32
msg:Unsafe JavaScript attempt to access frame
url: http://ads.XXXXXX.net/?XXXXXX
line:0
col:0
error:Unsafe JavaScript attempt to access frame
---------------------------------------------

显然这个脚本不是我的网站,做了一些研究后我发现它是 Internet Explorer 的蠕虫病毒

我的问题是:如何将日志限制为我自己的脚本?


您可以随时检查 URL:

// If the script is not being loaded from my domain
if(url.indexOf('http://mydomain') == -1)
{
    // Allow the error to propagate normally
    return false;
}

但是,如果某些第三方注入内联脚本而不是外部加载的脚本,这可能不会有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 AJAX/PHP 进行 Javascript 全局错误处理:将日志限制为我自己的脚本 的相关文章

  • SVG 转 JPG / PNG

    有没有工作模块可以convert a SVG image into像素格式如JPEG or PNG 看看蜡染工具包 具体来说是光栅化器 http xmlgraphics apache org batik tools rasterizer h
  • 将音频与视频流合并 Node.js

    我正在创建 YouTube 视频下载器并且正在使用ytdl core库 它无法下载带有音频的高质量视频 因为 youtube 将其放在另一个文件中 但我需要将其全部下载到一个文件中 我已经这样做了 app get download asyn
  • 禁用 JavaScript 中的右键单击

    当我尝试禁用右键单击时 它不起作用 我尝试使用下面的代码 document onclick function e console log e button if e button 2 e preventDefault return fals
  • 何时不使用承诺[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在阅读了数十篇关于 es6 Promise 有多伟大以及为什么我们应该实现它们的文章之后 我有这样的感觉 ALL我的 不平凡的 JavaScri
  • 除括号之间的内容外,所有内容均小写

    考虑以下字符串 LoReM FOO IPSUM dolor BAR Samet fooBar 我正在寻找一种方法来小写所有内容 除了 brackets 之间的内容应该被忽略 所以期望的输出是 lorem FOO ipsum dolor BA
  • 响应式网格布局框架[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何记录返回的事件发射器

    如何记录所发出的事件stream返回于MyFunc 与 JSDoc MyFunc description param Object opts description return Stream description function My
  • 如何使用xquery查找节点并向其添加子节点?

    是否可以使用xpath xquery查询特定的xml节点 然后向其导入 添加子节点 示例 代码取自http codepad org gJ1Y2LjM http codepad org gJ1Y2LjM 这是在类似的问题中提出的 但不相同 1
  • 访问 TypeScript 数组的最后一个元素

    TypeScript 中有访问数组最后一个元素的符号吗 在 Ruby 中我可以说 array 1 有类似的东西吗 您可以通过索引访问数组元素 数组中最后一个元素的索引将是数组的长度 1 因为索引是从零开始的 这应该有效 var items
  • 您可以使用 MySQL 查询来完整创建数据库的副本吗

    我有一个包含 5 个表的 MySQL 数据库的实时版本和一个测试版本 我不断使用 phpMyAdmin 将实时版本中的每个表复制到测试版本 有谁有mysql查询语句来制作数据库的完整副本吗 查询字符串需要考虑结构 数据 自动增量值以及与需要
  • 通过复选框选择多行时出错错误未定义索引:复选框

    我想从中选择多行checkbox并想通过单击按钮立即更新它们 我尝试了多种方法 但不起作用 你能帮忙吗 它显示错误为Undefined index checkbox td td
  • PHP 中的简单 JSON 请求

    我有以下 json country code latitude 45 9390 longitude 24 9811 zoom 6 address city country Romania country code RO region 我只想
  • 如何在 e2e AngularJS 测试中进行文件上传?

    在我的一种观点中 我有一个文件上传控件 它支持通过拖放或单击按钮后打开的标准文件对话框上传文件 How to do this in my e2e tests1 1 Just one of the two options will be en
  • PHP 相当于朋友或内部

    php 中是否有相当于 朋友 或 内部 的东西 如果没有 是否有任何模式可以遵循来实现这种行为 Edit 抱歉 但标准 Php 不是我想要的 我正在寻找类似于马戏团长所做的事情 我有一些类在后端进行 C 风格的系统调用 并且杂耍已经开始变得
  • WebRTC:通道、轨道和流与 RTP SSRC 和 RTP 会话之间的关系

    来自 Mozilla 网站 https developer mozilla org en US docs Web API Media Streams API https developer mozilla org en US docs We
  • 需要js、d3 和 nvd3 集成

    我面临整合的问题要求 questions tagged requirejs with d3 questions tagged d3 and nvd3 questions tagged nvd3 我找到了一个使用 require 的简单解决方
  • 替换两个引号之间的字符串

    我想转动一根绳子str hello my name is michael what s your s into hello my name is span class name michael span 我怎样才能在 JavaScript
  • 在 PHP 命令行上显示完整的堆栈跟踪

    Problem 我的 PHP 堆栈跟踪缩写为 Stack trace 0 www html table app create php 128 SoapClient gt call call Array 1 www html table ap
  • 当选择下拉列表中的某些值时,取消选中复选框

    当我从下拉列表中选择某个值或用户未从下拉列表中选择任何值时 我需要取消选中复选框 我现在正在使用 Jquery 这是我现在使用的代码 但它不起作用 Script
  • 在 javascript 中使用 xPath 解析具有默认命名空间的 XML

    我需要创建一个 XML xPath 解析器 所有解析都必须在客户端进行 使用 JavaScript 我创建了一个 javascript 来执行此操作 在默认名称空间发挥作用之前 一切看起来都正常 我根本无法查询具有默认命名空间的 XML 我

随机推荐

  • 如何将 Microsoft Bing 地图导航功能集成到 iPhone 应用程序中?

    我研究过微软必应地图导航 有 iOS 支持和 sdk 可用 http www microsoft com maps developers mobile aspx http www microsoft com maps developers
  • 删除 Vim 中两个括号之间的所有内容,包括换行符

    假设我有以下 python 数组文字 def f arr 1 2 3 我想删除括号中的所有内容 使其变成这样 def f arr 我怎样才能用 vim 中的最少命令来做到这一点 这些是我的一些尝试 Using di 将删除文本 但不会删除空
  • 尝试使用 request.path 设置 Cloud Firestore 安全规则

    我正在努力理解一些 Firestore 安全概念 我想根据以下内容制定一条规则request path财产 我的规则是这样的 service cloud firestore match databases database document
  • 什么是关键路径? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 作为一名开发人员 我有时会在开发执行的背景下遇到 关键路径 这个术语 从维基百科 http en wikipedia org wiki
  • Java:对大型磁盘文件进行随机读取的最快方法

    我有一组相当大的数据 大约 800 MB 左右 这基本上是一些大型的预计算表 我需要将一些计算速度提高几个数量级 创建该文件需要几台多核计算机使用优化的几天才能生成 和多线程算法 我愿意really需要该文件 既然已经计算过一次 那么 80
  • 强制 mdx 查询返回列名

    从 powerpivot 连接到 SSAS 时 我遇到以下问题 如果由于某种原因 mdx 查询没有返回行 也不会返回列名 并且 powerpivot 会给出错误 在 SSMS 中执行此类查询时 如果 mdx 什么也不返回 则得到 0 行 如
  • Android Studio - 找不到 intellij-core.jar

    我使用的是android studio 3 1 4 错误 找不到 intellij core jar com android tools external com intellij intellij core 26 0 1 在以下位置进行了
  • 使用 AngleSharp linq 查询获取 Href 属性

    我想了解如何使用 Anglesharp 我根据示例编写了这段代码 https github com AngleSharp AngleSharp https github com AngleSharp AngleSharp Setup the
  • Android Studio 无需 sdkmanager 安装

    我一直在使用 macOS 10 15 3 在 Flutter 中进行编程 目标是 iOS 设备 今天我也尝试安装 Android Studio 以进行分支 安装没有错误 但是在Library Android sdk 没有tools子目录 这
  • 多流维基百科转储

    我下载了德语维基百科转储 dewiki 20151102 pages articles multistream xml 我的简短问题是 在这种情况下 多流 意味着什么 转储使用 bz2 进行压缩 bz2 支持并行版本 使其能够更快地压缩 解
  • C中的通用数据结构[重复]

    这个问题在这里已经有答案了 有没有办法在 C 中创建通用数据结构并根据存储的数据类型使用函数 该结构具有各种类型的数据 例如可以根据存储的数据进行打印 例如 假设我希望创建一个只存储 float 和 int 的二叉搜索树 自然的方法是创建一
  • Xcode 8 未找到代码签名

    升级到 Xcode 8 后 由于以下错误 我无法在设备上调试 App installation failed No code signature found 我的设置 观察以及到目前为止我所尝试的 该设备已安装 iOS 10 Xcode 7
  • 用于检查表中相同的列值对的 SQL 查询是什么?

    我有一个表 emp id name salary 并且没有主键 我知道这是一个坏主意 但我的工作是在不一致的表上 我想要一个查询来检索具有相同值对 id name 的元组 我尝试使用自连接但没有得到确切的声明 这里正在考虑同一对 但我正在研
  • 访问 *ngFor 中项目的索引

    我的 html 页面中有一个循环 代码是 li style display inline div class col lg 3 col md 4 col xs 6 thumb a class thumbnail img a div li 在
  • Pyenv:重建 python 后如何“重建”virtualenvs

    我重建了 python 3 7 以使 pyinstaller 在 Mac 上工作 它似乎使用 3 7 0 删除了我所有的 virtualenv python 版本文件仍然存在 它们指向我期望的位置 但是当我运行 pyenv virtuale
  • 根据 Pandas 中的日期窗口计算值的累积出现次数

    我有一个DataFrame df 看起来像下面这样 dd mm yy id 01 03 17 A 01 03 17 B 01 03 17 C 01 05 17 B 01 05 17 D 01 07 17 A 01 07 17 D 01 08
  • C 和 C++ 中静态变量初始化的区别

    我正在查看代码http geeksforgeeks org p 10302 http geeksforgeeks org p 10302 include
  • 重建 DIV id

    我有一段 php 它输出 div 取决于数组中有多少个 并为该 div 分配一个 id 即 div 1 div 2 等 我还设置了一个隐藏字段 其中包含输出了多少个 div 的计数 divcount 假设我有 5 个 div 那么 div
  • 在Visual Studio中添加服务安装程序和服务进程安装程序

    由于某种原因 在将 Installer 类添加到我的 Windows 服务项目后 我在设计模式下打开它并右键单击 但没有选项来添加服务安装程序或服务进程安装程序 有谁知道为什么会出现这种情况 在 Visual Studio 2008 和 2
  • 通过 AJAX/PHP 进行 Javascript 全局错误处理:将日志限制为我自己的脚本

    我有一个脚本可以检测我网站上的 Javascript 错误并将其发送到我的后端进行报告