封装即绘制强边界。在 Web 浏览器中,这可能意味着确保您的移动代码不会被其他移动代码滥用。在服务器上,这可能意味着区分已验证数据和未验证数据、区分一个用户的数据和另一个用户的数据,或者区分允许用户查看的数据和不允许用户查看的数据。
anonymous
字段设置为 enabled:true
。
...
kind: KubeletConfiguration
...
authentication:
anonymous:
enabled: true
...
Register
) 从 Web 表单进行访问,该表单要求用户通过提供其姓名和密码注册帐户。
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
try
{
return RedirectToAction("Index", "Home");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", "");
}
}
return View(model);
}
RegisterModel
类定义为:
public class RegisterModel
{
[BindRequired]
[Display(Name = "User name")]
public string UserName { get; set; }
[BindRequired]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
public string ConfirmPassword { get; set; }
public Details Details { get; set; }
public RegisterModel()
{
Details = new Details();
}
}
Details
类定义为:
public class Details
{
public bool IsAdmin { get; set; }
...
}
Example 1
中的场景,攻击者可能会浏览应用程序并发现 RegisterModel
模型中存在 Details
属性。如果出现这种情况,攻击者可能会尝试覆盖分配给这些属性的当前值。
name=John&password=****&details.is_admin=true
<struts-config>
<form-beans>
<form-bean name="dynaUserForm"
type="org.apache.struts.action.DynaActionForm" >
<form-property name="type" type="java.lang.String" />
<form-property name="user" type="com.acme.common.User" />
</form-bean>
...
User
类定义为:
public class User {
private String name;
private String lastname;
private int age;
private Details details;
// Public Getters and Setters
...
}
Details
类定义为:
public class Details {
private boolean is_admin;
private int id;
private Date login_date;
// Public Getters and Setters
...
}
Example 1
中的场景,攻击者可能会浏览应用程序并发现 User
模型中存在 details
属性。如果出现这种情况,攻击者可能会尝试覆盖分配给这些属性的当前值。
type=free&user.name=John&user.lastname=Smith&age=22&details.is_admin=true
private final Logger logger =
Logger.getLogger(MyClass.class);
public class MyClass {
private final static Logger good =
Logger.getLogger(MyClass.class);
private final static Logger bad =
Logger.getLogger(MyClass.class);
private final static Logger ugly =
Logger.getLogger(MyClass.class);
...
}
Console.Out
或 Console.Error
而不是专门的日志记录工具,会导致难以监控程序的运行状况。
public class MyClass {
...
Console.WriteLine("hello world");
...
}
Console.WriteLine()
来编写消息以进行标准输出。Console.WriteLine
的使用可能会在转向结构化日志记录系统的过程中导致一个漏洞。os.Stdout
或 os.Stderr
而不是专门的日志记录工具,会导致难以监控程序的运行状况。
...
func foo(){
fmt.Println("Hello World")
}
fmt.Println()
编写进行标准输出的消息。os.Stdout
或 os.Stderr
进行日志记录使用可能会在转向结构化日志记录系统的过程中导致漏洞。System.out
或 System.err
而不是专门的日志记录工具,会导致难以监控程序的运行状况。
public class MyClass
...
System.out.println("hello world");
...
}
System.out.println()
编写进行标准输出的消息。System.out
或 System.err
的使用可能会在转向结构化日志记录系统的过程中导致漏洞。process.stdout
或 process.stderr
而不是专门的日志记录工具,会导致难以监控程序的运行状况。
process.stdin.on('readable', function(){
var s = process.stdin.read();
if (s != null){
process.stdout.write(s);
}
});
process.stdout.write()
编写标准输出的消息。process.stdout
或 process.stderr
的使用可能会在转向结构化日志记录系统的过程中导致漏洞。print
或 println
而不是专门的日志记录工具,会导致难以监控程序的运行状况。
class MyClass {
...
println("hello world")
...
}
}
print
或 println
编写进行标准输出的消息。
sys.stdout.write("hello world")
sys.stdout
或 sys.stderr
的使用可能会在转向结构化日志记录系统的过程中导致漏洞。Kernel.puts
、Kernel.warn
或 Kernel.printf
而不是专门的日志记录工具,会导致难以监控程序的行为。
...
puts "hello world"
...
Kernel.puts
编写进行标准输出的消息。Kernel.puts
、Kernel.warn
或 Kernel.printf
的使用可能表示转向结构化日志记录系统过程中的一时疏忽。Logger
类,但是将信息记录到系统输出流:
require 'logger'
...
logger = Logger.new($stdout)
logger.info("hello world")
...
ERROR_CODE
已声明为公共、静态和非最终:
public class MyClass
{
public static int ERROR_CODE = 100;
//...
}