PHP编程中,关于$_REQUEST获取参数时防SQL注入和XSS的代码。

为了防止SQL注入,使用参数化查询是最有效的方式。以下是一个示例代码,演示如何在PHP中使用$_REQUEST获取参数,并通过PDO(PHP Data Objects)执行安全的SQL查询:


php代码

<?php

// 数据库连接配置

$dsn = 'mysql:host=localhost;dbname=testdb';

$username = 'root';

$password = '';


// 创建PDO实例并设置错误模式为异常

try {

    $pdo = new PDO($dsn, $username, $password);

    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

} catch (PDOException $e) {

    die('数据库连接失败: ' . $e->getMessage());

}


// 从请求中获取参数

$id = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;


// 使用参数化查询防止SQL注入

if ($id !== null) {

    $sql = 'SELECT * FROM users WHERE id = :id';

    $stmt = $pdo->prepare($sql);

    $stmt->bindParam(':id', $id, PDO::PARAM_INT);


    $stmt->execute();

    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);


    // 输出查询结果

    echo '<pre>';

    print_r($result);

    echo '</pre>';

} else {

    echo '参数id缺失';

}

?>

在这段代码中,我们使用PDO来创建数据库连接,并通过prepare和bindParam方法进行参数化查询,这样可以有效防止SQL注入攻击。

image.png

在PHP中使用$_REQUEST获取参数时,通常需要进行过滤和验证,以确保数据的安全性和有效性。以下是一个示例代码,演示如何对$_REQUEST参数进行基本的过滤:


php代码:

<?php

// 获取并过滤参数

$id = isset($_REQUEST['id']) ? trim($_REQUEST['id']) : null;

$name = isset($_REQUEST['name']) ? trim($_REQUEST['name']) : null;


// 过滤参数(避免SQL注入和XSS攻击)

$id = filter_var($id, FILTER_SANITIZE_NUMBER_INT);

$name = filter_var($name, FILTER_SANITIZE_STRING);


// 验证参数(根据需求调整验证规则)

if ($id && filter_var($id, FILTER_VALIDATE_INT) === false) {

    die('无效的ID参数');

}


if ($name && !preg_match('/^[\p{L} ]+$/u', $name)) {

    die('无效的名称参数');

}


// 继续处理过滤后的参数

echo 'ID: ' . htmlspecialchars($id, ENT_QUOTES, 'UTF-8') . '<br>';

echo 'Name: ' . htmlspecialchars($name, ENT_QUOTES, 'UTF-8') . '<br>';

?>

在这段代码中,我们首先使用trim去除参数的前后空白,然后使用filter_var函数对参数进行基本的过滤。FILTER_SANITIZE_NUMBER_INT用于清理非数字字符,FILTER_SANITIZE_STRING用于清理HTML标签和特殊字符。接着,我们使用正则表达式和filter_var对参数进行验证,确保数据符合预期格式。最后,使用htmlspecialchars防止XSS攻击。


上一篇:网站开发最佳实践:提升顺德企业用户体验的关键策略
下一篇:没有了!