Web技术核心与安全风险:从“盖房子”到“拆房子”

大家好,我是你们的网络安全向导。前面我们聊了网络通信、Windows和Linux安全,今天终于要进入最激动人心的领域——Web安全。你每天刷的网站、点的链接、填的表单,背后都有一套复杂的技术在运转。黑客为什么能黑掉网站?因为他们比你更懂这套技术是怎么“盖”起来的,然后找到“承重墙”上的裂缝。

别担心,我们不写代码,而是用盖房子的比喻,让你轻松搞懂Web四大核心、服务器漏洞、前后端原理,以及最危险的Webshell反序列化漏洞。准备好了吗?戴上安全帽,我们开始“拆解”Web世界!


一、Web四大核心——网站是怎么搭起来的?

Web的定义——互联网上的“大商场”

Web(万维网)就是通过浏览器访问的全球性信息服务体系。你打开浏览器输入网址,就能看到网页、图片、视频,就像走进一座巨大的线上商场。

比喻:Web = 商场大楼,浏览器 = 你的购物车,HTTP/HTTPS = 商场里的传送带。

1. Web服务器——存放商品的“仓库”

Web服务器是一台24小时开机的电脑,专门存储网页、图片等资源,并响应浏览器的请求。常见的Web服务器软件有:

  • Apache:老牌劲旅,市场占有率曾经最高。
  • Nginx:轻量级,高并发能力强,很多大厂在用。
  • IIS:微软家的,一般搭配Windows Server。

比喻:Web服务器就像商场的仓库,你(浏览器)想要一件商品,仓库管理员(服务器)就帮你找出来递给你。

2. 网页——你看到的“商品展示柜”

网页由HTML、CSS、JavaScript构成。HTML是骨架,CSS是衣服,JavaScript是让商品动起来的电动转盘。

3. Web应用——能互动的“智能柜台”

普通网页只能看,但Web应用能和你互动:登录、搜索、下单、评论……比如淘宝、微博、邮箱。

比喻:普通网页是报纸,只能读;Web应用是手机App,能点、能写、能发。

4. Web应用访问流程——从输入网址到看到页面

  1. 你输入URL(如 www.baidu.com)。
  2. DNS解析:把域名翻译成IP地址(就像查电话本找到电话号码)。
  3. TCP三次握手:浏览器和服务器建立连接(就像打电话前先拨号、等待接通)。
  4. 发送HTTP请求:浏览器说“我要首页”。
  5. 服务器返回HTTP响应:服务器把HTML、图片等打包发回。
  6. 浏览器渲染:把代码变成漂亮的页面。

你敲下回车到页面显示,中间这几步只花了不到一秒。


二、Web服务器漏洞——仓库的“暗门”

黑客不会正面硬刚防火墙,而是寻找Web服务器软件的解析漏洞,上传一个图片格式的木马,然后让它以脚本方式执行。

1. Apache解析漏洞——“文件名骗局”

Apache有个特性:一个文件可以有多个后缀,比如 shell.php.png。如果配置文件里把 .php 设为可执行,那么只要文件名中包含 .php 后缀(不一定是最后一个),就会被当作PHP脚本执行。

攻击示例:上传一个图片文件,名字叫 hack.php.jpg,内容却是PHP木马。Apache解析时发现文件名里有 .php,就会执行里面的代码。

防御:不要信任文件名后缀,用文件内容检测(如检查文件头)。

2. Nginx解析漏洞——“路径魔术”

Nginx在处理路径时,如果看到 /xxx.jpg/.php,会错误地将 .jpg 文件当做PHP脚本解析。

攻击示例:上传一个正常的图片 1.jpg,然后访问 http://target.com/1.jpg/.php,图片里的PHP代码就会被执行。

防御:修改Nginx配置,禁止解析此类路径;或者把上传目录的PHP执行权限关掉。

3. IIS解析漏洞——“分号截断”

IIS 6.0 有个古老漏洞:文件名中的分号 ; 后面的内容会被忽略。比如上传 shell.asp;.jpg,IIS会当成 .asp 脚本执行。

比喻:就像你给快递员看一个箱子,上面写着“衣服;炸弹”,快递员只看到“衣服”就放行了。

防御:升级IIS版本,或者对上传文件名进行严格过滤。

这些漏洞大多出现在老旧版本中,但依然有很多遗留系统存在风险。及时更新软件是最好的防御。


三、Web前端——网页的“骨架、衣服和灵魂”

HTML——骨架

HTML(超文本标记语言)用尖括号标签来定义网页结构。比如:

<h1>我是标题</h1>
<p>我是段落</p>
<img src="cat.jpg" />
<a href="https://baidu.com">点我去百度</a>

比喻:HTML就像盖房子时搭的钢筋水泥框架,决定了哪里是客厅、哪里是卧室。

CSS——衣服

CSS(层叠样式表)控制颜色、字体、布局,让网页变得好看。

h1 { color: red; font-size: 36px; }
p { background-color: yellow; }

比喻:CSS就是给房子刷漆、贴壁纸、铺地板。

JavaScript——灵魂

JavaScript让网页有交互:点击按钮弹出提示、表单验证、动态更新内容等。

document.getElementById("btn").onclick = function() {
    alert("你点了我!");
}

比喻:JavaScript就像房子里的智能家居——你一按开关,灯就亮。

安全小知识:黑客可以利用JavaScript注入恶意代码,这就是XSS(跨站脚本攻击)。我们以后会详细讲。


四、Web后端PHP基础安全——服务器里的“魔法厨房”

前端是客人看到的门面,后端才是真正做菜(处理数据)的厨房。PHP是最流行的后端语言之一。

1. GET与POST——两种点菜方式

  • GET:参数直接写在URL里,就像你大声喊出你要的菜名,所有人都听得见。
    例如:http://store.com/search?keyword=手机
    缺点:长度有限,不适合密码、大文件。
  • POST:参数放在请求体里,像你小声告诉服务员,别人看不见。
    适合登录、上传文件。

安全提示:不要用GET传密码!即使POST,也要用HTTPS加密。

2. PHP文件上传——最危险的“送货口”

网站通常允许用户上传头像、文件。如果后端没有严格检查文件类型和内容,黑客就能上传一个Webshell(网页后门)。

一个最简单的PHP Webshell(一句话木马)

<?php @eval($_POST['cmd']); ?>

攻击者连接这个文件,用POST发送 cmd=system('whoami'); 就能执行系统命令。

两种常见形态

  • eval形态:执行任意PHP代码。
  • system形态:执行系统命令(如 ls, whoami, cat /etc/passwd)。

比喻:Webshell就像你在厨房里藏了一个遥控机器人,黑客可以远程控制它,帮你“做菜”(执行命令)或者“砸锅”(破坏系统)。

防御措施

  • 只允许白名单后缀(如 .jpg, .png)。
  • 检查文件内容(比如图片文件头 89 50 4E 47 才是真的PNG)。
  • 将上传目录设置为不可执行脚本。
  • 对文件名随机重命名,不让用户控制最终路径。

五、PHP类与对象——图纸和汽车

面向对象编程听起来高深,其实很简单。

  • 类(Class):图纸。定义了车有什么属性(颜色、轮子)和方法(加速、刹车)。
  • 对象(Object):用图纸造出来的真实汽车。
  • 实例化:从图纸到汽车的过程。
class Car {
    public $color = "red";
    public function run() {
        echo "汽车在跑";
    }
}
$myCar = new Car();   // 实例化
echo $myCar->color;   // 输出 red
$myCar->run();        // 输出 汽车在跑

比喻:类就像蛋糕模具,对象就是做出来的蛋糕。你可以用同一个模具做无数个蛋糕。


六、序列化与反序列化——对象的“快递打包”

什么是序列化?

内存中的对象(比如上面的 $myCar)不方便直接存储或传输。序列化就是把它转成一个字符串:

$str = serialize($myCar);
// 输出类似:O:3:"Car":1:{s:5:"color";s:3:"red";}

什么是反序列化?

把那个字符串再变回对象:

$obj = unserialize($str);

比喻:序列化就像把一辆汽车拆成零件装进纸箱(打包),反序列化就是重新组装成汽车。

反序列化漏洞——拆开“炸弹包裹”

如果用户能控制反序列化的字符串,黑客可以精心构造恶意数据,当 unserialize() 执行时,会自动触发某些魔术方法(如 __wakeup(), __destruct()),从而执行危险操作。

常见魔术方法

  • __construct():创建对象时触发。
  • __destruct():销毁对象时触发。
  • __wakeup():反序列化时触发。

攻击示例:黑客构造一个序列化字符串,让反序列化后自动调用 system('rm -rf /')

防御

  • 永远不要反序列化不可信的数据。
  • 使用白名单限制允许反序列化的类。
  • 升级PHP版本,许多旧版本的漏洞已被修复。

七、Python与暴力扫描工具——黑客的“自动敲门机”

Python是网络安全领域的“瑞士军刀”,很多扫描工具都用它写。

安装模块pip install requests

Dirsearch——目录扫描工具(暴力猜网站后台地址):

apt-get install dirsearch
dirsearch -u "http://target.com"

它会自动尝试常见路径,比如 /admin, /backup, /upload,如果服务器返回200,就说明存在该目录。

比喻:Dirsearch就像一个贼,挨家挨户试门把手,看哪家没锁门。

注意:只在自己授权或靶场中使用,乱扫别人的网站是违法的。


八、总结与安全建议

Web世界就像一座繁华的城市:

  • HTML/CSS/JS 是建筑的外观和装饰。
  • Web服务器 是物流中心。
  • 后端语言(PHP) 是处理订单的厨房。
  • 序列化/反序列化 是打包拆包的过程。
  • Webshell 是藏在地下室的暗门。

作为新人,你应该记住

  1. 永远不要相信用户输入——所有GET、POST、上传的文件都要严格过滤。
  2. 禁用危险函数——如 eval(), system(), exec(),或者限制其使用范围。
  3. 文件上传必须多重校验——后缀、MIME类型、文件头、内容检测。
  4. 不要反序列化不可信的数据——用JSON代替序列化,或者使用白名单。
  5. 保持软件更新——Apache、Nginx、PHP的漏洞几乎每个月都有补丁。

写在最后

今天我们逛了一圈Web世界的“施工现场”:从服务器漏洞到前端三剑客,从PHP上传到序列化炸弹。希望这些比喻能帮你建立起对Web安全的直观认识。知识是铠甲,不是武器,请只在合法环境中练习。

如果你觉得这篇文章对你有帮助,欢迎分享给更多朋友。如果发现任何错误或遗漏,请留言告诉我,我们一起学习、一起进步。下期我们可能会深入具体的Web漏洞(SQL注入、XSS、CSRF)或实战演练。

保持好奇,保持敬畏。我们下次见!


Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐