CS.NPS
在未加密或设置文件访问控制权限的情况下访问文件数据
如果以不安全的方式创建或使用文件,应用程序和系统数据可能会受到攻击。危险数据可能会注入应用程序,存储在文件中的数据也可能被访问、修改或破坏。CS.NPS 检查器会标记以下情况:在未经加密或未设置文件访问控制的情况下写入或读取文件数据。
漏洞与风险
如果文件未加密或未通过设置适当的权限来限制访问,则攻击者可以利用它来操纵关键信息。
缓解与预防
要避免漏洞:
- 使用以下对象的函数 SetAccessControl : System.IO.File 、 System.IO.FileInfo 或 System.IO.FileStream.Net Framework 类。
- 使用 Encrypt of System.IO.File 和 System.IO.FileInfo.Net Framework 类的函数。
漏洞代码示例
复制
using System.IO;
class FileCreator
{
public void WriteFile(string filePath, byte[] data, int length)
{
FileStream fs = File.Create(filePath);
fs.Write(data, 0, length);
fs.Close();
}
}
Klocwork 在本示例中报告缺陷,因为在未指定访问控制设置的情况下创建了文件流 fs,所以无法调用方法 SetAccessControl 和 Encrypt 来保护由文件流写入的数据。
修正代码示例
复制
using System.IO;
class FileCreator
{
public void WriteFile(string filePath, byte[] data, int length)
{
FileStream fs = File.Create(filePath, 1024, FileOptions.Encrypted); //no CS.NPS
fs.Write(data, 0, length);
fs.Close();
}
}
Klocwork 在此示例中不报告缺陷,因为代码会对文件进行加密。