CS.NPS

在未加密或设置文件访问控制权限的情况下访问文件数据

如果以不安全的方式创建或使用文件,应用程序和系统数据可能会受到攻击。危险数据可能会注入应用程序,存储在文件中的数据也可能被访问、修改或破坏。CS.NPS 检查器会标记以下情况:在未经加密或未设置文件访问控制的情况下写入或读取文件数据。

漏洞与风险

如果文件未加密或未通过设置适当的权限来限制访问,则攻击者可以利用它来操纵关键信息。

缓解与预防

要避免漏洞:
  • 使用以下对象的函数 SetAccessControlSystem.IO.FileSystem.IO.FileInfoSystem.IO.FileStream.Net Framework 类。
  • 使用 Encrypt of System.IO.FileSystem.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,所以无法调用方法 SetAccessControlEncrypt 来保护由文件流写入的数据。

修正代码示例

复制
  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 在此示例中不报告缺陷,因为代码会对文件进行加密。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。