You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#布尔值条件判断异常:为何始终触发恶意脚本攻击提示

问题分析与解决方案:恶意字符检测逻辑错误导致业务分支无法进入

我帮你排查下问题,核心原因是你的HackerTextExistOrNot函数逻辑完全搞反了,导致SaveRecord里的判断条件完全不符合预期,所以才会一直进入恶意攻击的分支。

问题1:检测函数的返回语义完全颠倒

你的函数设计是想检测输入是否包含恶意字符,但当前逻辑完全搞反了:

  • 当首字符是攻击字符时,返回false(错误地标记为无恶意)
  • 当首字符正常时,返回true(错误地标记为有恶意)
    而SaveRecord里用的是||判断——只要有一个字段返回true就触发攻击分支,所以正常字段都会被误判成恶意输入,自然永远进不了业务逻辑。

问题2:未处理空字符串/Null的情况

如果某个字段是空字符串或null,访问text[0]会直接抛出IndexOutOfRangeException,虽然你的try-catch会抛出异常,但这会导致程序崩溃,而非正常处理。


修正后的检测函数

我把函数逻辑修正并简化,同时增加空值处理:

public bool HackerTextExistOrNot(string text) { 
    // 先处理空值或空字符串,避免索引越界异常
    if (string.IsNullOrEmpty(text)) {
        // 可根据业务调整:空字符串若允许则返回false,若视为恶意则返回true
        return false;
    }
    var attackChars = new char[] { '=', '+', '-', '@' }; 
    // 直接返回判断结果:首字符是攻击字符则返回true(存在恶意),否则返回false
    return attackChars.Contains(text[0]); 
}

额外优化:简化SaveRecord里的重复判断

你当前在SaveRecord里写了大量重复的||判断,不仅冗余还容易出错,可以改成集合+LINQ的方式简化:

// 把所有需要检测的字段放到集合中
var fieldsToValidate = new List<string>
{
    RRSOCSaving.STORE_CODE,
    RRSOCSaving.STATE,
    RRSOCSaving.CITY,
    RRSOCSaving.SITE_STORE_FORMAT,
    RRSOCSaving.STORE_SITENAME,
    // ... 补充其他所有需要检测的字段
    RRSOCSaving.ALPM_ECNUMBER
};

// 检查是否存在任意一个恶意字段
bool hasMaliciousInput = fieldsToValidate.Any(field => objGetData.HackerTextExistOrNot(field));

if (hasMaliciousInput) {
    strReturnId = "Something went wrong due to malicious script attack..!!!";
} else {
    // 原来的正常业务逻辑分支
    if (RRSOCSaving.ROLE_ASSIGNED == "SLP State Head") {
        // ... 你的业务代码
    } else if (RRSOCSaving.ROLE_ASSIGNED == "NHQ Admin") {
        // ... 你的业务代码
    }
}

这样修正后,检测逻辑就能正常工作:正常输入会进入业务分支,只有当字段首字符是指定攻击字符时,才会触发恶意攻击提示。

内容的提问来源于stack exchange,提问作者HEEN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 20:42:32