گزارش دهی نامناسب(Insufficient Logging&Monitoring): تفاوت بین نسخه‌ها

از Secure Coding

(ایجاد صفحه خالی)
 
 
سطر ۱: سطر ۱:
 +
نرم افزار های مختلف برای اطلاع رسانی خود و سایر استفاده کنندگان نرم افزار از log استفاده می کنند.
  
 +
برای مثال پس از ورود کاربر جدید به سیستم و احراز هویت با نام کاربری و کلمه عبور، نرم افزار نام کاربری و کلمه عبور به صورت log نمایش می دهد.
 +
 +
یا در مثال دیگر نرم افزار پس از ارسال پیام خصوصی کاربران، پیام را به صورت log اعلام و نمایش دهد.
 +
 +
== روش های جلوگیری ==
 +
 +
اطلاعات حساس را حد امکان log نکنید ولی اگر نیاز به log شدن دارید، به صورت غیر واضح log کنید.
 +
 +
برخی از اطلاعات مهم که نباید به صورت واضح log شود.
 +
 +
* کلمه عبور
 +
* Ip address
 +
* اطلاعات بانکی
 +
* اطلاعات تولید شده توسط برنامه مانند نام کاربری
 +
 +
یک نمونه log بد:
 +
 +
<div lang="en" dir="ltr" class="mw-content-ltr">
 +
<pre>
 +
error - user bob cant eat pork
 +
</pre>
 +
</div>
 +
 +
این log نام کاربر را نمایش می دهد.
 +
 +
حالت بهبود یافته:
 +
 +
<div lang="en" dir="ltr" class="mw-content-ltr">
 +
<pre>
 +
error - meal code not allowed for this user
 +
</pre>
 +
</div>
 +
 +
یک نمونه log بد در JAVA
 +
 +
<div lang="en" dir="ltr" class="mw-content-ltr">
 +
<pre>
 +
package org.o7planning.securitywebapp.utils;
 +
 +
import java.util.HashMap;
 +
import java.util.Map;
 +
 +
import org.o7planning.securitywebapp.bean.UserAccount;
 +
import org.o7planning.securitywebapp.config.SecurityConfig;
 +
import java.io.IOException;
 +
import java.util.logging.Level;
 +
import java.util.logging.Logger;
 +
 
 +
public class DataDAO {
 +
 +
  private static final Logger LOGGER = Logger.getLogger(DataDAO.class.getName());
 +
  private static final Map<String, UserAccount> mapUsers = new HashMap<String, UserAccount>();
 +
 +
  static {
 +
      initUsers();
 +
  }
 +
 +
  private static void initUsers() {
 +
 +
      // This user has a role as EMPLOYEE.
 +
      UserAccount emp = new UserAccount("employee1", "123", UserAccount.GENDER_MALE, //
 +
            SecurityConfig.ROLE_EMPLOYEE);
 +
 +
      // This user has 2 roles EMPLOYEE and MANAGER.
 +
      UserAccount mng = new UserAccount("manager1", "123", UserAccount.GENDER_MALE, //
 +
            SecurityConfig.ROLE_EMPLOYEE, SecurityConfig.ROLE_MANAGER);
 +
 +
      mapUsers.put(emp.getUserName(), emp);
 +
      mapUsers.put(mng.getUserName(), mng);
 +
  }
 +
 +
  // Find a User by userName and password.
 +
  public static UserAccount findUser(String userName, String password) {
 +
  LOGGER.info("Logger Name: "+LOGGER.getName());
 +
 +
      UserAccount u = mapUsers.get(userName);
 +
      if (u != null && u.getPassword().equals(password)) {
 +
      LOGGER.info("User "+ u.getUserName() +" Logged in with "+ u.getPassword());
 +
          return u;
 +
      }
 +
      return null;
 +
  }
 +
 +
}
 +
</pre>
 +
</div>
 +
 +
حالت بهبود یافته:
 +
 +
<div lang="en" dir="ltr" class="mw-content-ltr">
 +
<pre>
 +
package org.o7planning.securitywebapp.utils;
 +
 +
import java.util.HashMap;
 +
import java.util.Map;
 +
 +
import org.o7planning.securitywebapp.bean.UserAccount;
 +
import org.o7planning.securitywebapp.config.SecurityConfig;
 +
import java.io.IOException;
 +
import java.util.logging.Level;
 +
import java.util.logging.Logger;
 +
 
 +
public class DataDAO {
 +
 +
  private static final Logger LOGGER = Logger.getLogger(DataDAO.class.getName());
 +
  private static final Map<String, UserAccount> mapUsers = new HashMap<String, UserAccount>();
 +
 +
  static {
 +
      initUsers();
 +
  }
 +
 +
  private static void initUsers() {
 +
 +
      // This user has a role as EMPLOYEE.
 +
      UserAccount emp = new UserAccount("employee1", "123", UserAccount.GENDER_MALE, //
 +
            SecurityConfig.ROLE_EMPLOYEE);
 +
 +
      // This user has 2 roles EMPLOYEE and MANAGER.
 +
      UserAccount mng = new UserAccount("manager1", "123", UserAccount.GENDER_MALE, //
 +
            SecurityConfig.ROLE_EMPLOYEE, SecurityConfig.ROLE_MANAGER);
 +
 +
      mapUsers.put(emp.getUserName(), emp);
 +
      mapUsers.put(mng.getUserName(), mng);
 +
  }
 +
 +
  // Find a User by userName and password.
 +
  public static UserAccount findUser(String userName, String password) {
 +
  LOGGER.info("Logger Name: "+LOGGER.getName());
 +
 +
      UserAccount u = mapUsers.get(userName);
 +
      if (u != null && u.getPassword().equals(password)) {
 +
      LOGGER.info("User Logged in");
 +
          return u;
 +
      }
 +
      return null;
 +
  }
 +
 +
}
 +
</pre>
 +
</div>
 +
 +
 +
[[category:گزارش دهی نامناسب(Insufficient Logging&Monitoring)]]

نسخهٔ کنونی تا ‏۲۸ دسامبر ۲۰۱۹، ساعت ۱۴:۴۷

نرم افزار های مختلف برای اطلاع رسانی خود و سایر استفاده کنندگان نرم افزار از log استفاده می کنند.

برای مثال پس از ورود کاربر جدید به سیستم و احراز هویت با نام کاربری و کلمه عبور، نرم افزار نام کاربری و کلمه عبور به صورت log نمایش می دهد.

یا در مثال دیگر نرم افزار پس از ارسال پیام خصوصی کاربران، پیام را به صورت log اعلام و نمایش دهد.

روش های جلوگیری[ویرایش]

اطلاعات حساس را حد امکان log نکنید ولی اگر نیاز به log شدن دارید، به صورت غیر واضح log کنید.

برخی از اطلاعات مهم که نباید به صورت واضح log شود.

  • کلمه عبور
  • Ip address
  • اطلاعات بانکی
  • اطلاعات تولید شده توسط برنامه مانند نام کاربری

یک نمونه log بد:

error - user bob cant eat pork

این log نام کاربر را نمایش می دهد.

حالت بهبود یافته:

error - meal code not allowed for this user

یک نمونه log بد در JAVA

package org.o7planning.securitywebapp.utils;
 
import java.util.HashMap;
import java.util.Map;

import org.o7planning.securitywebapp.bean.UserAccount;
import org.o7planning.securitywebapp.config.SecurityConfig;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
  
public class DataDAO {
 
   private static final Logger LOGGER = Logger.getLogger(DataDAO.class.getName());
   private static final Map<String, UserAccount> mapUsers = new HashMap<String, UserAccount>();
 
   static {
      initUsers();
   }
 
   private static void initUsers() {
 
      // This user has a role as EMPLOYEE.
      UserAccount emp = new UserAccount("employee1", "123", UserAccount.GENDER_MALE, //
            SecurityConfig.ROLE_EMPLOYEE);
 
      // This user has 2 roles EMPLOYEE and MANAGER.
      UserAccount mng = new UserAccount("manager1", "123", UserAccount.GENDER_MALE, //
            SecurityConfig.ROLE_EMPLOYEE, SecurityConfig.ROLE_MANAGER);
 
      mapUsers.put(emp.getUserName(), emp);
      mapUsers.put(mng.getUserName(), mng);
   }
 
   // Find a User by userName and password.
   public static UserAccount findUser(String userName, String password) {
   LOGGER.info("Logger Name: "+LOGGER.getName());
		
      UserAccount u = mapUsers.get(userName);
      if (u != null && u.getPassword().equals(password)) {
  		    LOGGER.info("User "+ u.getUserName() +" Logged in with "+ u.getPassword());
          return u;
      }
      return null;
   }
 
}

حالت بهبود یافته:

package org.o7planning.securitywebapp.utils;
 
import java.util.HashMap;
import java.util.Map;

import org.o7planning.securitywebapp.bean.UserAccount;
import org.o7planning.securitywebapp.config.SecurityConfig;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
  
public class DataDAO {
 
   private static final Logger LOGGER = Logger.getLogger(DataDAO.class.getName());
   private static final Map<String, UserAccount> mapUsers = new HashMap<String, UserAccount>();
 
   static {
      initUsers();
   }
 
   private static void initUsers() {
 
      // This user has a role as EMPLOYEE.
      UserAccount emp = new UserAccount("employee1", "123", UserAccount.GENDER_MALE, //
            SecurityConfig.ROLE_EMPLOYEE);
 
      // This user has 2 roles EMPLOYEE and MANAGER.
      UserAccount mng = new UserAccount("manager1", "123", UserAccount.GENDER_MALE, //
            SecurityConfig.ROLE_EMPLOYEE, SecurityConfig.ROLE_MANAGER);
 
      mapUsers.put(emp.getUserName(), emp);
      mapUsers.put(mng.getUserName(), mng);
   }
 
   // Find a User by userName and password.
   public static UserAccount findUser(String userName, String password) {
   LOGGER.info("Logger Name: "+LOGGER.getName());
		
      UserAccount u = mapUsers.get(userName);
      if (u != null && u.getPassword().equals(password)) {
  		    LOGGER.info("User Logged in");
          return u;
      }
      return null;
   }
 
}