44、Web应用高级故障排除与维护指南

Web应用高级故障排除与维护指南

在Web应用的开发与运营过程中,会面临各种各样的问题,从安全威胁到代码错误,再到日常维护任务,每一个环节都需要开发者的关注。下面将详细介绍一些常见问题及解决方法。

停用调试功能

若不需要调试功能,可在主程序中将调试常量 WCRAD_DEBUG_SERVER 设置为 .F. ,并重新构建应用程序:

#DEFINE WCRAD_DEBUG_SERVER .F.

停用此功能后,保留应用程序中对该调试辅助工具的设置不会产生额外成本。

检测黑客攻击

如果应用程序在互联网上公开可用,迟早会面临黑客攻击。虽然像“拒绝服务”攻击等大多数类型的黑客攻击通常不直接涉及应用程序,但应用程序仍可在某些方面发挥积极作用。
- 登录失败尝试 :若应用程序使用用户登录功能,可记录任何无效尝试的IP地址和用户ID。识别到这些尝试后,可采取多种措施,如锁定账户或向系统管理员发送电子邮件警告。
- 无效的Cookie和许可证密钥 :收到无效的Cookie或许可证密钥值可能是黑客试图劫持其他有效用户会话并获取特权信息的尝试。记录这些事件并通知系统管理员有助于识别和处理此类情况。
- URL中的无效主键或替代键 :对在URL查询字符串中指定无效主键或替代键的请求要保持警惕,这可能表明黑客试图“猜测”他们无权查看的数据标识。不过,在做出判断前,要考虑一些合法原因,如有人可能书签了一个链接到已删除记录的URL,或者URL被输入错误。

无效表单值

输入表单很容易被黑客攻击,任何人都可以通过保存页面的HTML源代码、编辑表单的HTML,然后提交修改后的版本来实现。为防止此类攻击,必须在渲染和后处理期间验证所有提交内容并执行所有安全规则。例如,对于使用数据库值填充的单选按钮或下拉列表,要确认提交的值来自这些有效列表。

锁定特定IP地址

若识别到来自特定IP地址或网络的潜在黑客攻击尝试,应立即采取行动。可通过以下几种方式阻止特定IP地址访问应用程序:
- 创建IP锁定表 :在应用程序中创建一个 IPLockout 表来记录有问题的IP地址,每次访问时检查 Request.GetIPAddress() ,若地址在表中则拒绝处理该访问。
- 配置Web服务器 :大多数Web服务器(如IIS)可配置为拒绝来自特定IP地址或IP地址范围的任何请求,这样可保护网站的所有资源,而不仅仅是应用程序。
- 使用路由器或防火墙 :若能访问路由器或防火墙,可阻止恶意用户进入网络。

此外,若认为有人的行为可能构成犯罪,可联系联邦调查局(FBI)。可通过运行Windows的 NSLookup 实用程序并输入黑客的IP地址来查找其发起攻击的域名,进而联系该域名的系统管理员。不过要注意,有些黑客可以伪造IP地址,所以这种判断不一定可靠。

常见的Visual FoxPro编码错误

在Web Connection支持论坛上观察多年发现,一些常见的编码错误会导致严重的调试问题:
- SET EXACT ON设置问题 :开发者在代码中设置 SET EXACT ON 后未将其关闭,会导致Web Connection框架中的许多方法无法正常工作。实际上,在强大的Visual FoxPro语言中,几乎没有需要使用此设置的合法情况,若有,使用后应立即将其恢复为 OFF
- 分隔符问题 :在开发Web应用程序时,使用Visual FoxPro创建其他语言(如HTML、JavaScript)的“源代码”时,经常会遇到分隔符(引号和括号)问题。由于需要嵌套分隔符,且Visual FoxPro编译器在Web应用中不一定能捕获这些错误,如可能创建出有效的Visual FoxPro语法但生成不正确的HTML代码。

其他常见开发问题

除了Visual FoxPro编码错误外,Visual FoxPro开发环境中还存在其他常见问题:
- 无法跟踪代码 :当FXP文件与相应的PRG文件不同步,或者类仍存在于内存中(可能是应用程序未正确终止回到命令窗口)时,会出现无法跟踪代码的问题。可使用以下代码恢复开发环境:

SET DEVELOPMENT ON
CLEAR ALL
RELEASE ALL
CLEAR PROGRAM
SET PROCEDURE TO
SET CLASSLIB TO
CLEAR
  • 无法跟踪Web Connection框架代码 :若正在运行Web Connection管理控制台( Console.EXE ),即使应用程序正常终止,该可执行文件中内置的一些Web Connection框架仍会保留在内存中。若需要跟踪框架代码,唯一的解决方法是不使用控制台程序启动Visual FoxPro。
  • CONFIG.FPW文件问题 :要谨慎配置 CONFIG.FPW 文件中的命令,特别是 PATH 语句。错误的路径设置可能导致使用重复或过时的文件版本,这在故障排除时很难检测到。
  • DLL文件部署问题 :将生产应用程序更新到Web Connection的新版本时,常见的错误是忘记将新的DLL文件部署到服务器上。除了复制最新版本的 WC.DLL (需要停止并重新启动Web服务),还必须将最新版本的 wwIpStuff.DLL 复制到应用程序目录(即Visual FoxPro可执行文件所在的目录)。
理解wcErrors.TXT文件

Web Connection应用程序还有另一个错误来源,记录在名为 wcErrors.TXT 的简单文本文件中。该文件由 WC.DLL 本身写入,而非Visual FoxPro应用程序。
- 文件位置 :若 WC.INI 文件中的临时文件路径设置正确, wcErrors.TXT 文件将位于该路径下;若该路径无效或无写入权限,文件将在如 \WinNT\System32 子目录中创建。
- 文件内容 :文件中的条目包括正常的日常事件、应用程序的可用性或响应性问题以及仅限于COM操作的问题。并非所有条目都表示有问题,例如在不使用 KeepAlive 选项的COM消息传递中,应用程序实例在一段时间不活动后被释放和重新加载是正常现象,相应的日志条目可忽略。但像“Web Connection请求超时”这样的条目则可能表示应用程序存在问题。

HTML问题及解决方法

除了Visual FoxPro代码问题,HTML页面的外观也经常出现问题,可通过以下标准做法和故障排除技术来解决:
1. 嵌入注释 :在HTML输出中嵌入注释有助于确定HTML的意图,特别是在嵌套 <table> 元素时。若HTML由Visual FoxPro代码生成,这些注释在审查代码和查看生成的HTML源代码时都有用。
2. 缩进HTML :在实际可行的情况下缩进HTML以显示结构元素的嵌套,这与缩进Visual FoxPro代码有相同的好处,有助于诊断问题,尤其是在嵌套 <table> 元素时。
3. 使用浏览器的“另存为”功能 :若问题涉及页面结构,在Visual FoxPro代码中尝试修复并测试每个增量更改可能很耗时。可使用浏览器的“另存为”功能将页面源代码保存为本地文件,然后使用文本或HTML编辑器尝试修复页面结构,在浏览器中导航到物理文件查看结果,确定正确的调整后再应用到Visual FoxPro应用程序中。
4. 使用HTML验证工具 :像 www.w3.org/ (特别是 http://validator.w3.org/ www.w3.org/People/Raggett/tidy/ )等网站以及像 UltraEdit32 这样的具有 HTMLTidy 功能的文本编辑器可用于验证HTML。
5. 检查HTML源代码 :若浏览器渲染的页面看起来完全错误,要检查HTML源代码中是否缺少结束标签和结束分隔符,如标签属性值中缺少结束引号可能导致整个文档显示错误。
6. 处理浏览器问题 :支持不同浏览器和版本的客户端时,在开发过程中能够从这些不同浏览器查看应用程序至关重要。早期发现浏览器问题更容易纠正,常见问题包括:
- 不同浏览器对HTML错误的容忍度不同,如Microsoft Internet Explorer比Netscape Navigator更宽容。
- 并非所有浏览器都支持相同的功能,或者对功能的支持方式不同,如级联样式表(CSS)功能在不同浏览器中的处理不一致。
- 可能会出现新的浏览器,而开发者可能未意识到。
- 一些浏览器存在漏洞,如Netscape Navigator 6.2之前的大多数版本都有一些只有通过使用该浏览器查看应用程序才能发现的漏洞和特性。
7. 添加“查看部分源代码”功能 :若网页显示不正常,许多开发者会使用浏览器的“查看源代码”工具,但对于复杂页面,在该窗口中查找问题可能非常耗时。可通过导航到 www.microsoft.com/Windows/IE/WebAccess/ 下载并安装“Microsoft Web Developer Accessories”,为Microsoft Internet Explorer添加“查看部分源代码”功能,该功能允许选择网页的一部分并仅查看负责该部分的HTML。

Web Connection应用程序的维护要求

为确保生产Web Connection应用程序继续以可接受的性能运行,需要执行以下常规维护任务:
- 清理临时文件 :定期清除临时文件文件夹中扩展名为 TMP RET 的无关文件。在正常操作中,Web Connection会自动删除这些文件,但在某些错误条件或服务器崩溃时,可能需要手动清除或创建自动化例程来完成此操作。
- 处理wcErrors.TXT文件 :定期检查并删除(或重命名)Web Connection DLL文件创建的 wcErrors.TXT 文件,该文件可提供应用程序通信问题的线索。可通过电子邮件将该文件每天发送给管理员,然后删除它。
- 管理请求日志 :若记录单个Web访问,请求日志可能会变得很大,影响系统性能。可采取以下措施:
- 若不需要记录每次访问,可在应用程序的INI文件中关闭请求日志记录,但Web Connection仍会记录错误。
- 频繁清除请求日志,可通过Web远程触发Web Connection提供的维护例程( wwMaint::ClearLog )。若通过COM运行多个服务器实例,清除日志时需要先停止除一个实例外的所有实例并暂停其他请求,这些操作可从Web Connection管理页面( admin.asp )完成。
- 若需要保留所有历史请求信息,可每天创建一个新的日志,并安排一个进程将这些日志合并到一个离线存档中进行进一步分析。
- 从Web Connection 3.60版本及更高版本开始,可将请求记录到SQL Server而不是本地Visual FoxPro表中。
- 处理会话表 :若应用程序使用会话,需要定期打包会话表以删除过期的会话记录,可通过点击Web Connection管理页面( admin.asp )上的“重新索引Web Connection系统文件”链接来完成。执行此任务的频率取决于应用程序的使用水平,对于拥有数千用户的繁忙网站,此类任务应至少每天执行一次。
- 数据库维护 :可能需要定期对生产数据库执行 PACK REINDEX 操作,此时需要独占使用数据库,与前面讨论的情况类似。

综上所述,Web应用的开发和维护是一个复杂的过程,需要开发者关注各个方面的问题,及时发现并解决潜在的风险,以确保应用程序的稳定运行。

Web应用高级故障排除与维护指南(续)

常见问题处理流程总结

为了更清晰地展示处理各类问题的流程,下面通过 mermaid 流程图来呈现:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px

    A([发现问题]):::startend --> B{问题类型}:::decision
    B -->|调试功能| C(停用调试功能: 设置WCRAD_DEBUG_SERVER为.F.并重建应用):::process
    B -->|黑客攻击| D(按不同攻击类型处理):::process
    D --> D1(登录失败: 记录IP和ID,采取措施):::process
    D --> D2(无效Cookie或许可证: 记录并通知管理员):::process
    D --> D3(URL无效键: 警惕并考虑合法原因):::process
    B -->|无效表单值| E(验证提交内容,执行安全规则):::process
    B -->|特定IP攻击| F(锁定IP地址):::process
    F --> F1(创建IPLockout表):::process
    F --> F2(配置Web服务器):::process
    F --> F3(使用路由器或防火墙):::process
    B -->|编码错误| G(解决Visual FoxPro编码问题):::process
    G --> G1(SET EXACT ON问题: 及时恢复为OFF):::process
    G --> G2(分隔符问题: 注意嵌套和语法):::process
    B -->|开发环境问题| H(解决开发环境问题):::process
    H --> H1(无法跟踪代码: 执行恢复代码):::process
    H --> H2(无法跟踪框架代码: 不使用控制台启动):::process
    H --> H3(CONFIG.FPW问题: 谨慎配置):::process
    H --> H4(DLL部署问题: 部署最新版本):::process
    B -->|wcErrors.TXT文件| I(理解文件内容和位置):::process
    B -->|HTML问题| J(按不同HTML问题处理):::process
    J --> J1(嵌入注释):::process
    J --> J2(缩进HTML):::process
    J --> J3(使用“另存为”功能):::process
    J --> J4(使用验证工具):::process
    J --> J5(检查源代码):::process
    J --> J6(处理浏览器问题):::process
    J --> J7(添加“查看部分源代码”功能):::process
    B -->|维护任务| K(执行维护任务):::process
    K --> K1(清理临时文件):::process
    K --> K2(处理wcErrors.TXT文件):::process
    K --> K3(管理请求日志):::process
    K --> K4(处理会话表):::process
    K --> K5(数据库维护):::process
问题处理优先级排序

在实际的Web应用维护过程中,不同问题的处理优先级有所不同。以下是一个简单的优先级排序表格:
| 问题类型 | 优先级 | 原因 |
| ---- | ---- | ---- |
| 黑客攻击 | 高 | 直接威胁应用程序的安全性和数据完整性 |
| 编码错误 | 中 | 可能导致应用程序功能异常,但通常不会立即造成严重后果 |
| HTML问题 | 中 | 影响用户体验,但一般不会影响应用程序的核心功能 |
| 开发环境问题 | 中 | 影响开发效率,但不影响生产环境的应用程序运行 |
| 维护任务 | 低 | 属于常规性任务,不及时处理可能会影响性能,但不会导致应用程序崩溃 |

案例分析

为了更好地理解上述问题的处理方法,下面通过一个实际案例进行分析。

案例背景 :某Web应用在运行一段时间后,性能明显下降,用户反馈页面加载缓慢,部分功能无法正常使用。

问题排查过程
1. 检查请求日志 :发现请求日志非常大,已经影响到系统性能。这是因为之前没有对请求日志进行有效的管理,导致日志文件不断增大。
2. 查看wcErrors.TXT文件 :发现有一些关于应用程序响应超时的记录,进一步检查发现是由于部分数据库查询效率低下导致的。
3. 检查HTML页面 :发现部分页面的HTML代码存在嵌套错误和缺少结束标签的问题,这也影响了页面的加载速度。

解决方案
1. 管理请求日志 :采用每天创建新日志并合并到离线存档的方式,同时在应用程序的INI文件中关闭不必要的请求日志记录。
2. 优化数据库查询 :对数据库进行 PACK REINDEX 操作,同时优化查询语句,提高查询效率。
3. 修复HTML问题 :使用HTML验证工具检查并修复HTML代码中的错误,同时在代码中嵌入注释和正确缩进,方便后续维护。

通过以上措施,该Web应用的性能得到了显著提升,用户反馈页面加载速度明显加快,功能也恢复正常。

总结与建议

在Web应用的开发和维护过程中,要建立完善的监控和预警机制,及时发现潜在的问题。对于常见的问题,要制定相应的处理流程和规范,确保问题能够得到及时、有效的解决。同时,要定期对应用程序进行维护和优化,保证应用程序的性能和稳定性。

以下是一些具体的建议:
1. 安全方面 :加强对黑客攻击的防范,定期更新安全策略,及时处理可疑的IP地址和登录尝试。
2. 编码方面 :遵循良好的编码规范,避免常见的编码错误,如 SET EXACT ON 和分隔符问题。
3. 维护方面 :建立定期的维护计划,包括清理临时文件、处理日志文件、管理数据库等,确保系统性能不受影响。
4. 测试方面 :在开发过程中,要进行全面的测试,包括不同浏览器和版本的兼容性测试,及时发现并解决HTML和浏览器相关的问题。

通过以上的总结和建议,希望能够帮助开发者更好地应对Web应用开发和维护过程中的各种问题,确保应用程序的稳定运行。

根据原作 https://pan.quark.cn/s/459657bcfd45 的源码改编 Classic-ML-Methods-Algo 引言 建立这个项目,是为了梳理和总结传统机器学习(Machine Learning)方法(methods)或者算法(algo),和各位同仁相互学习交流. 现在的深度学习本质上来自于传统的神经网络模型,很大程度上是传统机器学习的延续,同时也在不少时候需要结合传统方法来实现. 任何机器学习方法基本的流程结构都是通用的;使用的评价方法也基本通用;使用的一些数学知识也是通用的. 本文在梳理传统机器学习方法算法的同时也会顺便补充这些流程,数学上的知识以供参考. 机器学习 机器学习是人工智能(Artificial Intelligence)的一个分支,也是实现人工智能最重要的手段.区别于传统的基于规则(rule-based)的算法,机器学习可以从数据中获取知识,从而实现规定的任务[Ian Goodfellow and Yoshua Bengio and Aaron Courville的Deep Learning].这些知识可以分为四种: 总结(summarization) 预测(prediction) 估计(estimation) 假想验证(hypothesis testing) 机器学习主要关心的是预测[Varian在Big Data : New Tricks for Econometrics],预测的可以是连续性的输出变量,分类,聚类或者物品之间的有趣关联. 机器学习分类 根据数据配置(setting,是否有标签,可以是连续的也可以是离散的)和任务目标,我们可以将机器学习方法分为四种: 无监督(unsupervised) 训练数据没有给定...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值