网站安全,SQL注入

来源:互联网 发布:素材软件 编辑:程序博客网 时间:2024/04/27 00:41

自己管理的小网站出了一些完全问题,以前不太注意,做了一些防护,记录一下。Asp.Net4.0 网站。


1.隐藏网站的目录。


如上,在iis6.0的网站属性中,选择“主目录”,然后去掉“目录浏览”的选项。这样,就可以隐藏网站目录。


2.提高数据库和用户的密码复杂度,使用的是access数据库,设置了16位复杂密码,用户统一设置了12位复杂密码。


3.问题描述:Microsoft ASP.NET 很容易受到信息泄露攻击。攻击者可以发送一个通知是否支持调试支持的恶意请求。攻击者可以利用 DEBUG 动词来发送恶意请求。

解决办法:将web.config中的<compilation debug="true"/> 改为<compilation debug="false"/>

个人感觉就是在服务器上跑的网站,不允许调试。 


4.问题描述:在web应用form表单中,如果input标签没有指定“autocomplete”属性为“off”,则“autocomplete”的属性会自动默认为“on”。当web应用form表单中的密码类型的input标签的“autocomplete”属性为“on”时,用户若提交了一个新的用户名和密码时,浏览器将会询问用户是否保存该用户名和密码信息。如果用户选择保存,则之后在显示该web应用表单时,用户名和密码将会被自动填充到对应的输入框中。用户一但保存密码,攻击者就可以通过本地从浏览器缓存中获取明文密码,导致用户敏感信息泄露。

解决方案:增加autocomplete="off"属性值,如:<input type="password" name="password" autocomplete="off">


5.问题描述:点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。

这个其实能看懂,但是以前确实没仔细想过,也没见过。

解决方案:1.在web.config增加

<httpProtocol>  <customHeaders>    <add name="X-Frame-Options" value="SAMEORIGIN"/>  </customHeaders></httpProtocol>

2.在iis中,网站属性,http头,添加属性。如下。


这里的属性值也可使用DENY:不允许。SAMEORIGIN:仅允许本网站。


6.SQL注入。

基本的SQL注入就是通过使用通配符等改变SQL语句的结构和逻辑,其实在后台验证登陆的页面有写不允许 ‘通配符。这次统一使用了参数。

原先的写法

string Str="select * from [表名] where id="+theID;

现在统一改成了

string Str="select * from [表名] where id=@wantPara1";

然后在把参数传递过去,在进行数据库操作的时候进行替换。因为ADO.NET对于SQL注入有一定的防范措施,相当于直接调用。麻烦了一点,但是仔细想想,也安全一些。

需要注意的一点是,asp.net经常会用到通用的模板页面,然后在地址栏写id=参数,这样的东西,最好也一并进行修改。基本的原则是,牵扯到可能造成数据库损失的拼接sql语句,都进行修改。

由于部分原因,网站还需要连接Oracle数据库,在进行Oracle数据操作时,通配符有一些不同。

@相当于:

%相当于||

参数前的@用: 代替,like查询语句中的%(占位符)用|| 代替。


7.最后,硬件防火墙可以抵御肉鸡的一些攻击,然后服务器的windows防火墙也要打开,可以防护部分攻击。可以考虑安装一个“360主机卫士”。这样基本差不多。


0 0