php、代码审计



PHP功能的熟悉

PHP文件可包含文本、HTML、JavaScript代码和PHP代码
在这里插入图片描述
在这里插入图片描述

获取用户输入

新建一个input.html和welcome.php
input.html内容如下:

<form action="welcome.php" method="post">
name:<input type="text" name="fname">
age:<input type="text" name="age">
<input type="submit">
</form>

welcome.php内容如下:

welcome,<?php echo $_POST["fname"];?>!<br>
your age is:<?php echo $_POST["age"];?>

将其放在网站根目录下,访问网站:
在这里插入图片描述
点击提交:
在这里插入图片描述

PHP编写安全的SQL查询功能

1.编写querry.php文件:

<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>username</th><th>password</th></tr>";
 
class TableRows extends RecursiveIteratorIterator {
    function __construct($it) { 
        parent::__construct($it, self::LEAVES_ONLY); 
    }
 
    function current() {
        return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>";
    }
 
    function beginChildren() { 
        echo "<tr>"; 
    } 
 
    function endChildren() { 
        echo "</tr>" . "\n";
    } 
} 
 
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "security";
 
try {
    // 建立数据库连接
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // 设置连接为异常模式
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // 预处理模式
    $stmt = $conn->prepare("SELECT * FROM users where id=:id"); 
    // 给参数赋值
    $stmt->bindParam(':id',$_REQUEST["id"]);
    // 执行sql语句
    $stmt->execute();
 
    // 设置结果集为关联数组
    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
    // 将结果输出,并用表格封装
    foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) { 
        echo $v;
    }

}
catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}
// 关闭数据库连接
$conn = null;
echo "</table>";
?>

2.编写index.html文件:

<html>
<head>
<meta charset="utf-8">
<title>实训测试</title>
</head>
<body>

<form action="querry.php" method="POST">
id: <input type="text" name="id">
<!-- 名字: <input type="text" name="fname">
年龄: <input type="text" name="age"> -->
<input type="submit" value="提交">
</form>

</body>
</html>

3.将两者放入网站根目录下,访问:
在这里插入图片描述
且其不能被联合查询注入:
在这里插入图片描述

SQLi代码审计

漏洞原因(代码层级)
1.审计点:mysql_connect()
2.未正确地进行预编译查询。
审计点:mysqli、pdo关键字
如直接拼接未进行绑定、未进行预编译、未正确初始化预编译选项导致宽字节注入

部署安全的文件上传demo脚本

漏洞原因(代码层级)
1.后端程序未正确识别和处理上传文件的扩展名、大小和内容
审计点:move_uploaded_file()

XSS代码审计

审计点:

$_GET
$_POST
$_REQUEST
$_COOKIE
前端提交的REFERER和USER-AGENT等记录的前端提交的内容

seay审计sqli-labs

启动seay,新建项目,打开sqli-labs第一关的文件夹,发现其未对输入的id进行处理,所以存在sql注入的漏洞。

在这里插入图片描述

小结

3种审计方式:
(1)代码通读审计
(2)危险函数审计
(3)关键功能及代码对照审计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值