Frieza

MS08067安全实验室

  博客园  :: 首页  :: 新随笔  :: 联系 ::  :: 管理

启用了不安全的HTTP方法

利用apache服务器的rewrite功能,对TRACE请求进行拦截。编辑httpd.conf文件增加下面内容:
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
更详细的解释如下:
LoadModule rewrite_module modules/mod_rewrite.so #  首先,激活rewrite模块
RewriteEngine On #  启用Rewrite引擎
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)  # 对Request中的Method字段进行匹配:^TRACE 即以TRACE字符串开头
RewriteRule .* - [F]   #   定义规则:对于所有格式的来源请求,均返回[F]-Forbidden响应。
对于1.3.34以上和2.0.55以上版本的apache服务器,配置文件增加:TraceEnable off
或者用如下方法:
在项目或tomcat下的web.xml中,添加如下配置:
<!-- 关闭不安全的HTTP方法   -->
	<security-constraint>
		<web-resource-collection>
				<web-resource-name>任意名称</web-resource-name>
				<url-pattern>/*</url-pattern>
				<http-method>PUT</http-method>
				<http-method>DELETE</http-method>
				<http-method>HEAD</http-method>
				<http-method>OPTIONS</http-method>
				<http-method>TRACE</http-method>
		</web-resource-collection>
		<auth-constraint></auth-constraint>
	</security-constraint>
	<login-config>
	<auth-method>BASIC</auth-method>

未授权访问(越权)

  1. 对当前登录用户进行权限验证。

  2. 使用session对用户的身份进行判断和控制。

    session.setAttribute("username",username); 
       if((String)session.getAttribute("username")!=admin){
    (response.sendRedirect("XXX.jsp")};
    注意XXX.jsp为错误页面。
    

明文传输

  1. 使用正规的ca机构颁发的https证书
  2. 采用非对称加密方式(不可逆的加密方式)
  3. 建议按照网站的密级要求,需要对密码传输过程中进行加密得使用加密的方式传输,如使用HTTPS, 但加密的方式增加成本,或许会影响用户体验。如果不用 HTTPS,可以在网站前端用 Javascript 做密码加密,加密后再进行传输。

SQL注入

1、 通过参数化查询方式进行SQL注入攻击防护,参考代码:

	using (SqlConnection conn = new SqlConnection(connectionString))
{
		conn.Open();
		SqlCommand comm = new SqlCommand();
		comm.Connection = conn;
		//为每一条数据添加一个参数
		comm.CommandText = "select COUNT(*) from Users where Password = @Password and UserName = @UserName";
		comm.Parameters.AddRange(
new SqlParameter[]{
			new SqlParameter("@Password", SqlDbType.VarChar) { Value = password},
			new SqlParameter("@UserName", SqlDbType.VarChar) { Value = userName},});
		comm.ExecuteNonQuery();
}
	//以“?”等位符进行参数化查询
PreparedStatement pstmt = con.prepareStatement("select * from table where name = ?");
pstmt.setString(1, para);
ResultSet rs = pstmt.executeQuery();
  1. 使用MyBatis技术,通过Mapper.xml文件定义SQL语句进行SQL注入攻击防护,参考代码:

     <mapper namespace="TestUser"> //命名空间
     <select id="getById" parameterType="java.lang.String"
       
       resultMap="TestFlowResult">
       select
       <include refid="TestFlowColumns" />
       <![CDATA[
     	from TEST_TABLE
     	where
     	   INSPECT_ID = #{id} 
       ]]>
     </select>
     </mapper>
     注:在编写mybatis的映射语句时,尽量采用“#{xxx}”这样的格式。若不得不使用“${xxx}”这样的参数,要手工地做好过滤工作,来防止sql注入攻击。
    
  2. 使用特殊字符过滤程序防护SQL注入攻击,参考代码:

     public static bool SqlCheck(string OldString)
     {
        bool Checkvalue = false;
        string NewString = OldString.ToLower();
        string Replace = "'|and|exec|insert|select|delete|update|count|*|;
     |%|union|chr|mid|master|truncate|char|declare|asc|cast|
     set|fetch|varchar|sysobjects|drop|alert|script|<|>";
        string[] arrReplace = Replace.Split('|');
        for (int i = 0; i < arrReplace.Length; i++)
        {
     	  if (NewString.IndexOf(arrReplace[i].ToString()) >= 0)
     	  {
     bolvalue = true;
     		break;
     	  }
        }
        return Checkvalue;
     }
    
  3. 对数据库方面进行加固,来防止sql注入的产生:

     1、不要以sysadmin的身份连接数据库。而是使用特定的数据库用户,只具有读取,写入和更新数据库中适当数据的适当特权。此帐户定期检查,确定它所具有的特权。 
     2、以安全的方式创建SQL。让数据库来完成创建SQL的工作,而不是在代码中完成。使用参数化SQL语句,同时也能提高查询的效率。
     3、	保证数据库用户连接信息非明文保存。
    
  4. 对管理方面进行加固,来防止sql注入的产生:

     1、加强编程人员良好的安全编码意识,系统地学习安全编码的知识,减少源代码泄露的风险。
     2、建立起良好的代码审核、审查体系。由专人负责代码的审计,增加安全监督环节。
    

redis未授权访问

到redis安装目录下,配置redis.conf文件:
1、默认只对本地开放
bind 127.0.0.1
2、添加登陆密码
修改 redis.conf 文件,添加
requirepass  mypasswd
3、在需要对外开放的时候修改默认端口(端口不重复就可以)
port 2344
4、以低权限运行 Redis 服务(重启redis才能生效)
为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆
5、最后还可以配合iptables限制开放
posted on 2021-03-29 10:18  Frieza_021  阅读(512)  评论(0)    收藏  举报