【问题标题】:PHP pdo and security for taking data (insert)PHP pdo 和获取数据的安全性(插入)
【发布时间】:2019-03-20 09:56:53
【问题描述】:

我正在用一个简单的表格制作一个网站,我可以在其中为想要预订一张桌子进行测验的人获取一些数据。一切正常,但我对它的安全性知之甚少。在我自己的研究之后,我以 PDO 结束了我的 php 代码,但是有谁知道这是否好? (一切正常,只是为了安全

ob_start();
include 'connect.php';
$naam = $_POST['naam'];
$email = $_POST['email'];
$personen = $_POST['aantal'];
$telefoonnummer = $_POST['phone'];
$bedrijf = $_POST['bedrijf'];

if($bedrijf != 1){
  $bedrijf = 0;
}
if (empty($naam) || empty($email) || empty($personen) || empty($telefoonnummer)) {
    header("Location: ../form.php?error=emptyfields");
    exit();


} else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    header("Location: ../form.php?error=invalidmail");
    exit();
}
else if(!is_numeric($telefoonnummer)){
    header("Location: ../form.php?error=invalidphone");
    exit();
}
else{
    $sql = "INSERT INTO aanmelding (naam, email, personen, telefoonnummer, bedrijf) VALUES (:naam, :email, :personen, :telefoonnummer, :bedrijf)";
    $statement = $conn->prepare($sql);

    $statement->execute([
        'naam' => $naam,
        'email' => $email,
        'personen' => $personen,
        'telefoonnummer' => $telefoonnummer,
        'bedrijf' => $bedrijf,
    ]);
    header("Location: ../form.php?succes=aanmelding");
    exit();
}

<?php
$servername = ""; //here is good data for connection
$username = "";//here is good data for connection
$password = "";//here is good data for connection

try {
    $conn = new PDO("mysql:host=$servername;dbname=DB3712239", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}
catch(PDOException $e)
{
    echo "Connection failed: " . $e->getMessage();
}
?>

【问题讨论】:

    标签: php security pdo


    【解决方案1】:

    简而言之,是的,PDO 和准备好的语句应该没问题。如果您愿意,可以使用一些 preg_replace/preg_match/str_replace 函数或至少 strip_tags 对变量进行进一步清理(最好使用白名单方法来指定允许的字符),以帮助对抗 xxs(假设您要将信息打印到某处的屏幕上)。

    我想说你应该在执行时使用一个条件,因为你假设它被正确添加了,也许想想说。 if(...execute()){////}else{direct to an error page})。但这根本不是安全问题

    【讨论】:

    • 另外,最好在生产代码中打印出通用消息而不是`$e->getMessage()`,然后打开它进行测试——以防万一它打印出你不知道的东西不想让麻瓜看到
    • 我还注意到查询中的位置标记与执行数组中的位置标记不匹配。我想我最近在某处读到您不再需要在位置标记的开头使用:,但我不知道这有多准确。您应该检查它是否真的在保存数据,而不仅仅是因为您没有使用 if 而将您重定向到成功页面
    • 它插入正确!感谢您的反馈,我的主要问题是它是否保存,您回答了谢谢。
    猜你喜欢
    • 2012-07-12
    • 1970-01-01
    • 2013-05-04
    • 2017-07-16
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    相关资源
    最近更新 更多