以下一段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());
}
}
}
}
}
关键安全措施说明
- 输入验证:通过正则表达式限制输入字符范围,防止恶意负载。
- 参数化查询:避免拼接SQL字符串,杜绝SQL注入可能性。
- 最小权限原则:操作前验证用户角色,仅允许必要权限。
- 敏感数据保护:使用行业标准加密算法(如AES)处理内存/存储中的敏感数据。
- 异常处理:明确拒绝非法请求,避免泄露系统信息。