小迪安全 Web安全 PHP开发 – 第十四天 – 个人博客项目&输入输出类&留言板&访问IP&UA头

Posted SecurityHacker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小迪安全 Web安全 PHP开发 – 第十四天 – 个人博客项目&输入输出类&留言板&访问IP&UA头相关的知识,希望对你有一定的参考价值。

一、输入输出类

(一)PHP实现搜索查询功能

1、网站获取用户输入的数据后,连接到数据库检索用户输入的信息,再将搜索结果返回给用户,从而实现搜索查询的功能。

2、代码示例

(1)index主页,搜索框

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>php搜索查询</title>
    </head>
    <body>
        <ul>
            <li><a href="search.php">访问查询</a></li>
        </ul>
        <p>
            <form id="form1" action="search.php" method="POST">
                <label for="search">内容搜索</label>
                <input type="search" name="search" id="search" />
            </form>
        </P>
    </body>
</html>
(2)config/conn.php数据库连接配置文件
<?php
#设定参数
$servername = "localhost";
$username = "root";
$password = "root";
$database = "mysql";
#创建连接
$conn = mysqli_connect($servername, $username, $password,$database);
#检查连接
if(!$conn)
    die("连接失败:" . mysqli_connect_error());

$db_select = mysqli_select_db($conn,\'mysql\');
if(!$db_select)
    die("连接失败:" . mysqli_connect_error());

#echo "连接成功!";
?>
(3)search.php文件,处理用户输入的数据
<?php
include(\'config/conn.php\');
$s = $_POST[\'search\'];
$sql = "SELECT * FROM engine_cost WHERE cost_name LIKE \'%$s%\'";
$result = mysqli_query($conn,$sql);
#检测查询错误
if (!$result) 
    printf("Error: %s\\n", mysqli_error($conn));
    exit();

echo \'你搜索的:\'. "$s" . \'结果如下:\';
#输出搜索结果
while($row = mysqli_fetch_array($result,MYSQLI_ASSOC))
    echo \'<br><br><br>\';
    echo $row[\'engine_name\'] . \'<br>\';
    echo $row[\'device_type\'] . \'<br>\';
    echo $row[\'cost_name\'] . \'<br>\';

?>
(二)搜索查询界面容易出现的漏洞

1、由于需要把用户输入的数据连接到数据库中进行查询,再将查询结果结果返回给用户,因此容易出现SQL注入。

2、搜索框输入过滤若处置不当,则容易引发XSS跨站漏洞,用户输入代码会被执行,用户可通过XSS跨站攻击窃取网站cookie。

二、留言板

(一)PHP实现留言功能

1、留言板的功能:

(1)加载之前的内容

(2)提交留言

(3)提交留言后被加载

(4)留言内容会被存储在数据库中。

2、代码示例

(1)前端主页面

<html>
<head>
    <meta charset=""utf-8">
    <title>php留言板</title>
</head>
<body>
<h1>留言板</h1>
<form id="form2" action="liuyan.php" name="form2" method="post">
    <p>
        <label for="textfield1">账号:</label>
        <input type="text" name="account" id="account">
    </p>
    <p>
        <label for="textfield2">昵称:</label>
        <input type="text" name="name" id="name">
    </p>
    <p>
        <label for="textfield3">邮箱:</label>
        <input type="text" name="mail" id="mail">
    </p>
    <p>
        <label for="textarea">文本内容</label>
        <textarea name="content" id="content"></textarea>
    </p>
    <p>
        <input type="submit" name="submit" id="submit" value="提交">
    </p>
</form>
<p>
<hr>
</p>
<p>留言内容:</p>
<hr>
<p> </p>
</body>
</html>
(2)后端liuyan.php文件处理用户提交数据
<?php
#设置php编码格式
header("Content-type:text/html;Charset=utf-8");
include(\'config/conn.php\');
$a = $_POST[\'account\'];
$n = $_POST[\'name\'];
$m = $_POST[\'mail\'];
$c = $_POST[\'content\'];
#测试留言输入显示
#echo \'ID:\' . $a . \', 昵称:\' . $n . \', 邮箱:\' . $m . \', 内容:\' . $c . \'<br>\';
#将留言插入数据库
$sql1 = "INSERT INTO \'liu_yan_ban\'(account,name,mail,content) VALUES(\'$a\',\'$n\',\'$m\',\'$c\');";
mysqli_query($conn,$sql1);
#若ID为空,语句不执行
/*
if(!empty($i))
    $sql1 = "INSERT INTO \'liu_yan_ban\'(account,name,mail,content) VALUES(\'$a\',\'$n\',\'$m\',\'$c\');";
    mysqli_query($conn,$sql1);
*/
#将保存到数据库的留言内容显示出来
$sql2 = "SELECT * FROM liu_yan_ban";
$result = mysqli_query($conn,$sql2);
#检查查询错误
if (!$result) 
    printf("Error: %s\\n", mysqli_error($conn));
    exit();

while($row = mysqli_fetch_array($result,MYSQLI_ASSOC))
    echo \'<br>\';
    echo \'账号:\' . $row[\'account\'] . \'<br>\';
    echo \'昵称:\' . $row[\'name\'] . \'<br>\';
    echo \'邮箱:\' . $row[\'mail\'] . \'<br>\';
    echo \'内容:\' . $row[\'content\'] . \'<br>\';

?>
(3)config/conn.php文件
<?php
#设定参数
$servername = "localhost";
$username = "root";
$password = "root";
$database = "liu_yan_ban";
#创建连接
$conn = mysqli_connect($servername, $username, $password,$database);
#检查连接
if(!$conn)
    die("连接失败:" . mysqli_connect_error());

$db_select = mysqli_select_db($conn,\'liu_yan_ban\');
if(!$db_select)
    die("连接失败:" . mysqli_connect_error());

#echo "连接成功!";
?>
(二)易出现的漏洞

1、由于留言、评论、私信等用户输入输出数据会被存储到数据库中,若站点对用户数据处理不当,则易出现存储型跨站攻击。

(三)发现该类型漏洞思路

1、代码审计。

2、寻找用户能够控制页面输出内容的地方。

三、PHP全局变量$_SERVER

1 、 $_SERVER全局变量可用于获取浏览器、IP地址、设备系统等信息。

四、CSRF跨站点请求伪造

(一)概述

1、攻击者知道某个管理员的习惯,在某个管理员喜欢浏览的平台上植入JS代码网页,能够获取管理员管理的网站信息。

2、管理员去访问该平台会触发代码

3、由于管理员浏览器可以直接登录网站,攻击者从而获取网站管理权限。

(二)防范方法

1、管理的网站:检测来源,过滤攻击。

五、$_SERVER详解

$_SERVER[‘HTTP_ACCEPT_LANGUAGE’]//浏览器语言 
$_SERVER[‘REMOTE_ADDR’] //当前用户 IP 。 
$_SERVER[‘REMOTE_HOST’] //当前用户主机名 
$_SERVER[‘REQUEST_URI’] //URL

$_SERVER[‘REMOTE_PORT’] //端口。 
$_SERVER[‘SERVER_NAME’] //服务器主机的名称。 
$_SERVER[‘PHP_SELF’]//正在执行脚本的文件名 
$_SERVER[‘argv’] //传递给该脚本的参数。 
$_SERVER[‘argc’] //传递给程序的命令行参数的个数。 
$_SERVER[‘GATEWAY_INTERFACE’]//CGI 规范的版本。 
$_SERVER[‘SERVER_SOFTWARE’] //服务器标识的字串 
$_SERVER[‘SERVER_PROTOCOL’] //请求页面时通信协议的名称和版本 
$_SERVER[‘REQUEST_METHOD’]//访问页面时的请求方法 
$_SERVER[‘QUERY_STRING’] //查询(query)的字符串。 
$_SERVER[‘DOCUMENT_ROOT’] //当前运行脚本所在的文档根目录 
$_SERVER[‘HTTP_ACCEPT’] //当前请求的 Accept: 头部的内容。 
$_SERVER[‘HTTP_ACCEPT_CHARSET’] //当前请求的 Accept-Charset: 头部的内容。 
$_SERVER[‘HTTP_ACCEPT_ENCODING’] //当前请求的 Accept-Encoding: 头部的内容 
$_SERVER[‘HTTP_CONNECTION’] //当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。 
$_SERVER[‘HTTP_HOST’] //当前请求的 Host: 头部的内容。 
$_SERVER[‘HTTP_REFERER’] //链接到当前页面的前一页面的 URL 地址。 
$_SERVER[‘HTTP_USER_AGENT’] //当前请求的 User_Agent: 头部的内容。 
$_SERVER[‘HTTPS’]//如果通过https访问,则被设为一个非空的值(on),否则返回off 
$_SERVER[‘SCRIPT_FILENAME’] #当前执行脚本的绝对路径名。 
$_SERVER[‘SERVER_ADMIN’] #管理员信息 
$_SERVER[‘SERVER_PORT’] #服务器所使用的端口 
$_SERVER[‘SERVER_SIGNATURE’] #包含服务器版本和虚拟主机名的字符串。 
$_SERVER[‘PATH_TRANSLATED’] #当前脚本所在文件系统(不是文档根目录)的基本路径。 
$_SERVER[‘SCRIPT_NAME’] #包含当前脚本的路径。这在页面需要指向自己时非常有用。 
$_SERVER[‘PHP_AUTH_USER’] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。 
$_SERVER[‘PHP_AUTH_PW’] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。 
$_SERVER[‘AUTH_TYPE’] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型

以上是关于小迪安全 Web安全 PHP开发 – 第十四天 – 个人博客项目&输入输出类&留言板&访问IP&UA头的主要内容,如果未能解决你的问题,请参考以下文章

2020全年小迪网络安全笔记(目录)

2020小迪安全第五天笔记-系统及数据库等

小迪安全 Web安全 基础入门

前言-小迪web安全渗透培训视频笔记

(2020上半年第8天)小迪网络安全笔记(操作②)php函数过滤

小迪安全web学习笔记