C# 防范漏洞注入及权限控制风险

以下一段C#代码,展示如何通过输入验证、参数化查询和权限检查来防范敏感代码、漏洞注入(如SQL注入)以及权限控制风险。代码注释中会标注关键安全措施。


输入验证与参数化查询

csharp 复制代码
using System;
using System.Data.SqlClient;
using System.Text.RegularExpressions;

public class SecureDataAccess
{
    // 使用正则表达式验证输入(防止XSS/SQL注入)
    private static bool IsValidInput(string input)
    {
        return Regex.IsMatch(input, @"^[a-zA-Z0-9\s\-]+$");
    }

    // 参数化查询示例(防止SQL注入)
    public static void GetUserData(string userId)
    {
        if (!IsValidInput(userId)) 
        {
            throw new ArgumentException("Invalid input characters detected.");
        }

        string connectionString = "Your_Connection_String";
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            string query = "SELECT * FROM Users WHERE UserId = @UserId";
            SqlCommand command = new SqlCommand(query, connection);
            command.Parameters.AddWithValue("@UserId", userId); // 关键:参数化

            connection.Open();
            SqlDataReader reader = command.ExecuteReader();
            // 处理数据...
        }
    }
}

权限控制

csharp 复制代码
using System.Security.Principal;

public class AuthorizationService
{
    // 基于角色的权限检查
    public static bool CheckAccess(IPrincipal user, string requiredRole)
    {
        if (!user.Identity.IsAuthenticated)
        {
            return false;
        }
        return user.IsInRole(requiredRole); // 关键:角色验证
    }

    // 示例调用
    public static void RestrictedOperation(IPrincipal currentUser)
    {
        if (!CheckAccess(currentUser, "Admin"))
        {
            throw new UnauthorizedAccessException("Insufficient permissions.");
        }
        // 执行管理员操作...
    }
}

敏感数据处理

csharp 复制代码
using System;
using System.Security.Cryptography;
using System.Text;

public class DataProtection
{
    // 使用AES加密敏感数据(内存中)
    public static string EncryptData(string plainText, byte[] key, byte[] iv)
    {
        using (Aes aesAlg = Aes.Create())
        {
            aesAlg.Key = key;
            aesAlg.IV = iv;

            ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
            using (MemoryStream msEncrypt = new MemoryStream())
            {
                using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                {
                    using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                    {
                        swEncrypt.Write(plainText);
                    }
                    return Convert.ToBase64String(msEncrypt.ToArray());
                }
            }
        }
    }
}

关键安全措施说明

  1. 输入验证:通过正则表达式限制输入字符范围,防止恶意负载。
  2. 参数化查询:避免拼接SQL字符串,杜绝SQL注入可能性。
  3. 最小权限原则:操作前验证用户角色,仅允许必要权限。
  4. 敏感数据保护:使用行业标准加密算法(如AES)处理内存/存储中的敏感数据。
  5. 异常处理:明确拒绝非法请求,避免泄露系统信息。