Web安全与防护 (微课版) 课件 项目四 安全的用户输入:任务一 博客系统相关功能实现、任务二 跨站脚本攻击的原理、任务三四 跨站脚本漏洞修复与防范_第1页
Web安全与防护 (微课版) 课件 项目四 安全的用户输入:任务一 博客系统相关功能实现、任务二 跨站脚本攻击的原理、任务三四 跨站脚本漏洞修复与防范_第2页
Web安全与防护 (微课版) 课件 项目四 安全的用户输入:任务一 博客系统相关功能实现、任务二 跨站脚本攻击的原理、任务三四 跨站脚本漏洞修复与防范_第3页
Web安全与防护 (微课版) 课件 项目四 安全的用户输入:任务一 博客系统相关功能实现、任务二 跨站脚本攻击的原理、任务三四 跨站脚本漏洞修复与防范_第4页
Web安全与防护 (微课版) 课件 项目四 安全的用户输入:任务一 博客系统相关功能实现、任务二 跨站脚本攻击的原理、任务三四 跨站脚本漏洞修复与防范_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目四

安全的用户输入Web安全与防护本任务要点学习目标利用PHP实现文章发布相关与评论功能熟悉数据库增删查改的操作方法熟悉PHP数据库交互的功能编写方法

能够实现数据库的增删查改能够使用PHP实现数据库交互功能任务一

博客系统相关功能实现目录CONTENTS01/文章发布相关功能02/评论功能实现文章发布相关功能012010年Twitter遭到了来自StalkDaily网站的蠕虫病毒攻击。一旦用户访问受感染用户的个人资料页面,也将会被感染病毒。有部分报道称,蠕虫病毒修改了个人资料页的“关于我”的内容并加入了包括了蠕虫病毒的链接。受感染用户会不停地发送垃圾Twitter消息,引导用户访问StalkDaily网站。文章发布相关功能01//

创建数据库连接$host

=

'localhost';

//

数据库主机地址$username

=

'root';

//

数据库用户名$password

=

'password';

//

数据库密码$dbname

=

'blog';

//

数据库名称

$connection

=

mysqli_connect($host,

$username,

$password,

$dbname);//

检查连接是否成功if

(!$connection)

{

die("连接失败:

"

.

mysqli_connect_error());12.

}使用MySQL或其他关系型数据库。使用PHP操作数据库需要一个数据库连接。你可以使用PHP的mysqli扩展或PDO扩展来建立连接。以下是使用mysqli扩展建立连接的示例代码:文章发布相关功能01CREATE

TABLE

articles

(

id

INT(11)

UNSIGNED

AUTO_INCREMENT

PRIMARY

KEY,

title

VARCHAR(255)

NOT

NULL,

content

TEXT

NOT

NULL,

author

VARCHAR(255)

NOT

NULL,

published_date

TIMESTAMP

DEFAULT

CURRENT_TIMESTAMP7.

);在数据库中创建一个文章表来存储文章的信息。该表应该包括文章的标题、内容、作者、发布日期等字段。以下是一个示例SQL命令,用于创建一个名为“articles”的表:文章发布相关功能01<form

action="submit-article.php"

method="POST">

<label

for="title">文章标题:</label>

<input

type="text"

id="title"

name="title"><br>

<label

for="content">文章内容:</label>

<textarea

id="content"

name="content"></textarea><br>

<label

for="author">作者:</label>

<input

type="text"

id="author"

name="author"><br>

<input

type="submit"

value="发布文章"></form>创建一个网页,允许用户输入文章的标题和内容。将该信息发送到服务器并将其保存到数据库中。以下是一个简单的表单示例,用于输入文章标题和内容:文章发布相关功能01<?php//

连接数据库$connection

=

mysqli_connect('localhost',

'username',

'password',

'database');//

检查连接是否成功if

(!$connection)

{

die("连接失败:

"

.

mysqli_connect_error());}//

处理用户提交的表单数据$title

=

$_POST['title'];$content

=

$_POST['content'];$author

=

$_POST['author'];//

将文章信息插入到数据库中$query

=

"INSERT

INTO

articles

(title,

content,

author,

published_date)

VALUES

('$title',

'$content',

'$author',

NOW())";if

(mysqli_query($connection,

$query))

{

//

插入成功

echo

"文章发布成功!";}

else

{

//

插入失败

echo

"文章发布失败:"

.

mysqli_error($connection);}//

关闭数据库连接mysqli_close($connection);?>

当用户点击"发布文章"按钮时,该表单将提交到"submit-article.php"页面。你需要编写这个页面来处理表单数据并将文章信息插入到数据库中。以下是一个示例PHP代码,用于将文章信息插入到数据库中:文章发布相关功能01<?php//

连接数据库$connection

=

mysqli_connect('localhost',

'username',

'password',

'database');//

检查连接是否成功if

(!$connection)

{

die("连接失败:

"

.

mysqli_connect_error());}//

从数据库中检索文章信息$query

=

"SELECT

*

FROM

articles";$result

=

mysqli_query($connection,

$query);//

在页面上显示文章列表while

($row

=

mysqli_fetch_assoc($result))

{

echo

"<h2>"

.

$row['title']

.

"</h2>";

echo

"<p>"

.

$row['content']

.

"</p>";

echo

"<p>作者:"

.

$row['author']

.

",发布时间:"

.

$row['published_date']

.

"</p>";}//

关闭数据库连接mysqli_close($connection);?>创建一个页面来显示所有已发布的文章。可以从数据库中检索文章信息并在页面上显示出来。以下是一个简单的PHP代码,用于从数据库中检索文章信息并在页面上显示。文章发布相关功能01<?php//

连接数据库$connection

=

mysqli_connect('localhost',

'username',

'password',

'database');

//

检查连接是否成功if

(!$connection)

{die("连接失败:

"

.

mysqli_connect_error());}

//

获取要显示的文章的

ID$article_id

=

$_GET['id'];

//

从数据库中检索单篇文章信息$query

=

"SELECT

*

FROM

articles

WHERE

id=$article_id";$result

=

mysqli_query($connection,

$query);

//

检查是否检索到了文章if

(mysqli_num_rows($result)

==

{echo

"文章不存在";}

else

{//

显示单篇文章$row

=

mysqli_fetch_assoc($result);echo

"<h2>"

.

$row['title']

.

"</h2>";echo

"<p>"

.

$row['content']

.

"</p>";echo

"<p>作者:"

.

$row['author']

.

",发布时间:"

.

$row['published_date']

.

"</p>";}

//

关闭数据库连接mysqli_close($connection);?>当用户单击文章列表中的文章标题时,应该显示单独的页面来显示该文章的详细信息。可以在数据库中使用文章ID检索文章信息,并将其显示在单独的页面上。以下是一个简单的PHP代码,用于从数据库中检索单篇文章信息并在页面上显示出来。文章发布相关功能01<?php//

连接数据库$connection

=

mysqli_connect('localhost',

'username',

'password',

'database');//

检查连接是否成功if

(!$connection)

{

die("连接失败:

"

.

mysqli_connect_error());}//

获取要编辑的文章的

ID$article_id

=

$_GET['id'];//

处理用户提交的表单数据if

($_SERVER['REQUEST_METHOD']

==

'POST')

{

$title

=

$_POST['title'];

$content

=

$_POST['content'];

//

将更新后的文章信息保存到数据库中

$query

=

"UPDATE

articles

SET

title='$title',

content='$content'

WHERE

id=$article_id";

if

(mysqli_query($connection,

$query))

{

//

更新成功

echo

"文章更新成功!";

}

else

{

//

更新失败

echo

"文章更新失败:"

.

mysqli_error($connection);

}}//

从数据库中检索要编辑的文章信息$query

=

"SELECT

*

FROM

articles

WHERE

id=$article_id";$result

=

mysqli_query($connection,

$query);//

检查是否检索到了文章if

(mysqli_num_rows($result)

==

{

echo

"文章不存在";}

else

{

//

显示表单,允许作者编辑文章的标题和内容

$row

=

mysqli_fetch_assoc($result);

echo

"<form

method='POST'>";

echo

"<label>文章标题:</label><br>";

echo

"<input

type='text'

name='title'

value='"

.

$row['title']

.

"'><br>";

echo

"<label>文章内容:</label><br>";

echo

"<textarea

name='content'>"

.

$row['content']

.

"</textarea><br>";

echo

"<input

type='submit'

value='更新文章'>";

echo

"</form>";}//

关闭数据库连接mysqli_close($connection);?>可以为已发布的文章提供编辑功能,允许作者修改文章的标题和内容。可以创建一个包含表单的页面,让作者输入新的标题和内容,然后将其更新到数据库中。以下是一个简单的PHP代码,用于从数据库中检索要编辑的文章信息,并将更新后的信息保存到数据库中文章发布相关功能01<?php//

连接数据库$connection

=

mysqli_connect('localhost',

'username',

'password',

'database');//

检查连接是否成功if

(!$connection)

{

die("连接失败:

"

.

mysqli_connect_error());}//

获取要删除的文章的

ID$article_id

=

$_GET['id'];//

处理用户提交的表单数据if

($_SERVER['REQUEST_METHOD']

==

'POST')

{

//

从数据库中删除文章

$query

=

"DELETE

FROM

articles

WHERE

id=$article_id";

if

(mysqli_query($connection,

$query))

{

//

删除成功

echo

"文章删除成功!";

}

else

{

//

删除失败

echo

"文章删除失败:"

.

mysqli_error($connection);

}}

else

{

//

显示确认删除的页面

echo

"<form

method='POST'>";

echo

"<p>您确定要删除这篇文章吗?</p>";

echo

"<input

type='submit'

value='是的,我确定'>";

echo

"</form>";}//

关闭数据库连接mysqli_close($connection);?>可以为已发布的文章提供删除功能,允许作者从数据库中删除文章。可以创建一个确认删除的页面,询问作者是否真的要删除该文章,如果确认删除,则从数据库中删除该文章。以下是一个简单的PHP代码,用于从数据库中删除文章评论功能实现02CREATE

TABLE

comments

(

id

INT(11)

UNSIGNED

AUTO_INCREMENT

PRIMARY

KEY,

article_id

INT(11)

UNSIGNED

NOT

NULL,

name

VARCHAR(255)

NOT

NULL,

email

VARCHAR(255)

NOT

NULL,

content

TEXT

NOT

NULL,

created_at

TIMESTAMP

DEFAULT

CURRENT_TIMESTAMP);在MySQL数据库中创建一个名为“comments”的表,用于存储博客文章的评论,可以使用以下SQL命令创建该评论表.

评论功能实现02<?php//

获取文章的唯一标识符$article_id

=

$_GET['id'];//

连接到数据库$connection

=

mysqli_connect('localhost',

'username',

'password',

'database_name');//

查询文章$query

=

"SELECT

*

FROM

articles

WHERE

id

=

$article_id";$result

=

mysqli_query($connection,

$query);//

如果找到文章,则显示它if

(mysqli_num_rows($result)

>

0)

{

$article

=

mysqli_fetch_assoc($result);

echo

"<h1>"

.

$article['title']

.

"</h1>";

echo

"<p>"

.

$article['content']

.

"</p>";

//

查询文章的评论

$query

=

"SELECT

*

FROM

comments

WHERE

article_id

=

$article_id";

$result

=

mysqli_query($connection,

$query);

//

如果有评论,则显示它们

if

(mysqli_num_rows($result)

>

0)

{

while

($comment

=

mysqli_fetch_assoc($result))

{

echo

"<div

class='comment'>";

echo

"<p>"

.

$comment['name']

.

"

评论于

"

.

$comment['created_at']

.

"</p>";

echo

"<p>"

.

$comment['content']

.

"</p>";

echo

"</div>";

}

}

else

{

echo

"<p>暂时没有评论。</p>";

}

//

显示添加评论的表单

echo

"<h2>添加评论</h2>";

echo

"<form

method='POST'

action='"

.

$_SERVER['PHP_SELF']

.

"?id=$article_id'>";

echo

"<label>姓名:</label>";

echo

"<input

type='text'

name='name'><br>";

echo

"<label>邮箱:</label>";

echo

"<input

type='email'

name='email'><br>";

echo

"<label>评论:</label>";

echo

"<textarea

name='content'></textarea><br>";

//

提交按钮

echo

"<br><br>";

echo

"<input

type='submit'

value='提交'>";

echo

"</form>";

//

处理提交的评论

if

($_SERVER['REQUEST_METHOD']

==

'POST')

{

//

获取提交的评论信息

$name

=

$_POST['name'];

$email

=

$_POST['email'];

$content

=

$_POST['content'];

//

插入评论到数据库

$query

=

"INSERT

INTO

comments

(article_id,

name,

email,

content,

created_at)

VALUES

('$article_id',

'$name',

'$email',

'$content',

NOW())";

$result

=

mysqli_query($connection,

$query);

//

如果评论插入成功,则显示成功消息

if

($result)

{

echo

"<p>评论已提交。</p>";

}

else

{

echo

"<p>提交评论时出现了问题,请稍后再试。</p>";

}

}}//

关闭数据库连接mysqli_close($connection);?>在博客文章页面中,可以通过查询数据库中的评论表格,获取该文章的评论,并将它们显示在页面上。可以使用以下PHP代码实现这一功能评论功能实现02//

连接到数据库$connection

=

mysqli_connect("localhost",

"username",

"password",

"database");//

检查是否提交了一个有效的评论

IDif

(isset($_GET['delete_comment'])

&&

is_numeric($_GET['delete_comment']))

{

$comment_id

=

$_GET['delete_comment'];

//

执行SQLDELETE

语句,删除评论

$query

=

"DELETE

FROM

comments

WHERE

id

=

'$comment_id'";

$result

=

mysqli_query($connection,

$query);

//

如果删除成功,则显示成功消息

if

($result)

{

echo

"<p>评论已成功删除。</p>";

}

else

{

echo

"<p>删除评论时出现了问题,请稍后再试。</p>";

}}//

关闭数据库连接mysqli_close($connection);要实现评论删除功能,需要添加一个删除评论的链接或按钮,并编写删除评论的代码。以下是一种实现评论删除的方式课堂实践一、任务名称:完成博客系统文章发布功能二、任务内容:使用PHP开发语言,根据老师讲授的开发思路开发博客系统的文章发布和评论发布功能。三、工具需求:浏览器、Vscode、Apache、MySQL、PHP四、任务要求:完成实践练习后,由老师检查完成情况。课堂思考一、PHP中有哪些连接数据库的方式?二、PHP中如何保障数据库的安全操作?三、用户的恶意输入是否会对客户端产生影响?课后拓展:跨站脚本攻击请同学们通过互联网检索跨站脚本攻击的相关资料,学习并研究跨站脚本攻击的原理,下节课会抽点部分同学上来给大家讲解自己研究的成果。THANK

YOUToBeContinued项目四

安全的用户输入Web安全与防护本任务要点学习目标理解跨站脚本攻击的原理和类型理解并熟悉跨站脚本攻击的原理理解并熟悉跨站脚本攻击的分类任务二

跨站脚本攻击的原理目录CONTENTS01/反射型XSS02/存储型XSS03/DOM型XSS反射型XSS01反射型XSS(Cross-SiteScripting)攻击是通过向用户发送包含恶意脚本的链接或者欺骗用户点击链接来实现攻击的一种方式。与存储型XSS攻击不同,反射型XSS攻击并不需要攻击者将恶意脚本存储在目标网站上,而是将恶意脚本作为参数发送到目标网站上,目标网站将恶意脚本反射回用户的浏览器执行,从而完成攻击。具体来说,反射型XSS攻击主要包括以下几个步骤:(1)攻击者构造恶意URL,例如:/search?keyword=<script>alert('XSS')</script>

(2)用户点击恶意URL,Web应用程序接收到请求后解析URL参数,并将恶意脚本注入到响应中;(3)用户浏览器接收到响应后,览器会将其中的恶意脚本解析并执行,弹出一个对话框,显示'XSS'。

存储型XSS02存储型XSS(Cross-SiteScripting)攻击是一种存储再加载的攻击方式。攻击者向Web应用程序提交带有恶意脚本的数据,例如评论、留言、上传文件等,当其他用户访问包含恶意脚本的数据时,恶意脚本会被注入到页面中并执行。具体来说,存储型XSS攻击主要包括以下几个步骤:(1)攻击者向Web应用程序提交包含恶意脚本的数据,例如评论、留言等;(2)Web应用程序将包含恶意脚本的数据存储在数据库中,等待用户访问;(3)当用户访问包含恶意脚本的页面时,浏览器解析页面,并执行其中的恶意脚本;

(4)攻击者利用恶意脚本窃取用户的敏感信息、劫持用户会话或进行其他恶意操作。DOM型XSS03DOM型XSS(Cross-SiteScripting)攻击是一种基于浏览器端的XSS攻击方式,攻击者构造特定的URL或表单,将恶意脚本注入到Web页面中,通过修改DOM(文档对象模型)来达到攻击的目的。DOM型XSS攻击和传统的反射型和存储型XSS攻击不同,它不需要将恶意脚本注入到Web服务器端,而是通过构造特定的URL或表单,直接在用户的浏览器中执行攻击代码。DOM型XSS攻击的基本原理如下:(1)攻击者构造恶意URL,例如:/search#<script>alert('XSS')</script>

(2)用户点击恶意URL,Web应用程序接收到请求后解析;(3)解析恶意URL时,浏览器将#后面的内容作为页面内部锚点处理,并在DOM树中查找对应的元素;(4)攻击者构造的恶意脚本会修改页面中的元素和属性,从而执行攻击代码。课堂实践一、任务名称:理解跨站脚本攻击的原理与类型二、任务内容:回顾上一节课的代码是否存在问题三、工具需求:浏览器、Vscode、Apache、MySQL、PHP四、任务要求:小组讨论后轮流进行发言,老师进行点评。课堂思考一、跨站脚本攻击为什么简称为XSS而不是CSS?二、跨站脚本攻击能造成什么样的危害?三、反射型XSS和存储型XSS有什么区别?四、DOM型XSS和反射型XSS有什么区别?课后拓展:XSS检测利用请同学们通过互联网检索跨站脚本攻击的检测和利用手段,学习并研究跨站脚本攻击的检测和利用手段,下节课会抽点部分同学上来给大家讲解自己研究的成果。THANK

YOUToBeContinued项目四

安全的用户输入Web安全与防护本任务要点学习目标检测和利用跨站脚本漏洞熟悉跨站脚本漏洞的检测方法熟悉跨站脚本漏洞的利用方法任务三

跨站脚本漏洞检测与验证目录CONTENTS01/检测跨站脚本漏洞02/利用跨站脚本漏洞检测跨站脚本漏洞01(1)在应用程序中找到一个输入字段,例如搜索框、评论框或联系表单。输入一些HTML或JavaScript代码,例如:<script>alert('XSS');</script>

(2)提交输入并观察浏览器中是否弹出了一个警告框。如果弹出了警告框,说明应用程序中存在跨站脚本漏洞。(3)如果没有弹出警告框,尝试在输入中添加一些其他恶意代码,例如cookie窃取脚本、重定向脚本或恶意HTML标签。观察是否能够成功执行这些代码。(4)如果没有发现跨站脚本漏洞,请尝试在其他输入字段中进行类似的测试。例如,如果应用程序包含一个上传文件功能,则可以尝试上传包含恶意脚本的HTML文件。如果无法手动检测跨站脚本漏洞,可以使用自动化工具来扫描应用程序。常见的跨站脚本扫描工具包括OWASPZAP、Netsparker、Acunetix、BurpSuite等。利用跨站脚本漏洞02(1)窃取用户会话令牌或其他敏感信息。攻击者可以编写JavaScript代码来获取当前用户的cookie,然后将该cookie发送到攻击者的服务器。攻击者可以使用窃取的cookie登录用户的帐户,并执行其他恶意操作。(2)修改网页内容。攻击者可以注入恶意脚本来更改网页内容,例如添加广告、修改表单字段或注入其他恶意代码。(3)欺骗用户。攻击者可以注入恶意脚本来模拟合法的网页内容,例如伪造登录表单、模拟警告框或创建虚假的链接。项目四

安全的用户输入Web安全与防护本任务要点学习目标对跨站脚本漏洞进行修复和防范熟悉跨站脚本漏洞的修复防范方法任务四

跨站脚本漏洞修复与防范目录CONTENTS01/对用户输入进行处理02/使用内容安全策略03/使用安全Cookie对用户输入进行处理01$input

=

"<script>alert('XSS');</script>";$output

=

strip_tags($input);echo

$output;

//

输出:

alert('XSS');过滤输入数据:对于用户输入的数据,可以使用过滤器或正则表达式等方法进行过滤,去除其中的HTML标签和JavaScript代码;PHP中可以使用strip_tags()函数去除HTML标签;JavaScript中可以使用innerHTML属性去除HTML标签,使用encodeURI()函数编码URL等。例如使用strip_tags()函数去除HTML标签:对用户输入进行处理01$email

=

"";if

(!filter_var($email,

FILTER_VALIDATE_EMAIL))

{

echo

"Invalid

email

format";}验证输入数据:在接收到用户输入后,应该对其进行验证,确保其符合预期的格式和类型。例如,对于输入的邮件地址,可以使用PHP的filter_var()函数进行验证;对于输入的日期,可以使用JavaScript的Date对象进行验证。例如使用filter_var()函数验证输入的邮件地址:对用户输入进行处理01$input

=

"<script>alert('XSS');</script>";$output

=HTMLspecialchars($input,

ENT_QUOTES,

'UTF-8');echo

$output;

//

输出:

<script>

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论