有人问,我的网站为什么老是打不开,或者打开了,但是很慢,或者打开后,数据混乱了(数据库注入了)等。这个就要一点点分析了。
比如:如果,网站打开变慢了(排除网速,服务器等因素,单纯的从代码的角度来说的
,以下雷同,不在说明)。
分析步骤:先在浏览器里,查看网站的源代码,看看有什么异常代码吗,常见的情况,就是:页面底部,会多出很多外链(黑链),有的还很多js脚本代码等,这些都是影响打开速度的祸首。
接下来,我们就定位到了,是ftp(空间,vps)被坏人进入了。
还有一种可能是,如果,页脚的内容是通过后台管理动态添加的,那么,就是后台管理的用户名密码,被暴力破解(也有不费吹灰之力就进入的情况,那就是薄弱的用户名和密码,admin,admin)。 还有一种可能是,数据库被别人链接了,直接sql了你的内容。
我们首先要定位到底从哪里出的问题:是网站来的攻击、还有数据库攻击、或者空间服务商被攻击)。 我们要解决的就是前两个,最后一个,不用我们管。直接联系空间商就行了。
监控有:数据库的监控;网站访问监控;如果,你做一个网站,还要自己写代码监控,会不会,很累,其实,我们只要加入:统计代码。就可以了。比如:百度统计、CNZZ统计、51.La、量子衡道(LineZing)等。 使用这个,可以有效的定位,到底是不是网站来的攻击。强烈建议:后台管理要加入监控
自己写的代码,要保证一些常见的攻击的处理,比如:提交表单时,客户端js检查,也要后台程序代码做检查。保证insert到数据库的数据,都是干净的。
作为网站问题顾问,代码问题,这一块,一般是不涉及的。又不是我写的代码,处理起来很耗时。
尽量密码要设置的复杂一些
,用户名也自己改改(比如ftp的用户名,一般IDC都会默认为:website@domain.com,很多人都不修改的)。
不定期的修改一下密码,不要那么懒嘛。
设置密码,不要太随意,详见下边的介绍:
在服务器安全部署中,密码可能是最薄弱的一个环节。请务必在选择密码时保持高度谨慎。强密码有以下特征:
- 长度至少有七个字符。
- 密码中组合使用字母、数字和符号字符。
- 字典中查不到。
- 不是命令名。
- 不是人名。
- 不是用户名。
- 定期更改
- 与以前的密码明显不同。
Microsoft SQL Server 密码最多可包含 128 个字符,其中包括字母、符号和数字。由于在 Transact-SQL 语句中经常使用登录名、用户名、角色和密码,所以必须用英文双引号 (") 或方括号 ([ ]) 分隔某些符号。如果 SQL Server 登录名、用户、角色或密码具有以下特征,请在 Transact-SQL 语句中使用分隔符:
- 含有空格或以空格开头。
- 以 $ 或 @ 字符开头。
如果用于 OLE DB 或 ODBC 连接字符串,则登录名或密码不能包含以下字符:
[]{}(),;?*!@
。这些字符用于初始化连接或分隔连接值。
如果租用的是多少兆的空间(比如:500M .Net空间),使用ftp来上传下载网站源码,那么,如果你ftp用户名密码,被别人知道了,顺带的,TA也会知道web.config里的信息,比如数据库用户名密码。这个时候,我们就要加密一下了,防止数据库继续被破坏。
比如,我们要加密一下Sql连接字符串:
<connectionStrings>
<add name="MsSQL2000" connectionString="Data Source=127.0.0.1;Initial Catalog=CamnprDB;User ID=sa;Password=123456" providerName="System.Data.SqlClient"/>
</connectionStrings>
这里,我们使用:aspnet_regiis.exe命令行工具来加密和解密Web.config文件配置部分。详见使用命令行工具aspnet_regiis.exe
aspnet_regiis.exe -pef "connectionStrings" "C:\Inetpub\wwwroot\MySite" -prov "DataProtectionConfigurationProvider"
本例中只是加密了connectionStrings
节点,如果想加密其它的,比如,appSettings
,命令中换成此即可。
加密之后的web.config里的connectionStrings节点:
<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMnd8BFdERjHoAwE...hlUhy2EqMYhU5kIP16jdMmA==</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
加密之后,获取的方式,还和加密之前一样。比如下边的代码:
Response.Write(System.Configuration.ConfigurationManager.ConnectionStrings["MsSQL2000"].ToString());
建议,一定要保存好数据库的日志(养成一个月备份一次的习惯)。 如果空间足够大的话,设置数据库日志时,不要限制大小。
具体的怎么分析DB Log呢? 一般都用日志分析工具,可以去问一下度娘、谷哥(HK的不行,就用其它国家的谷歌,比如奥地利http://www.google.at/
)、SOSO、Bing
以上这种情况,基本都是做网站者大意的问题。和黑客不搭嘎(hack常会直接让你挂掉,不和你玩这种捉迷藏的游戏(*^__^*))
以上方法,基本可以解决大部分的网站问题(注入代码、脏数据、打不开网站、信息泄漏等)。 如果你还有其它的好方法,欢迎你的留言。