php - 如何以简单的形式禁用 SQL 注入(inject)的可能性?

标签 php mysql sql sql-injection

<分区>

我有这个评论表单,其中唯一的输入是评论的名称和文本区域。

我的问题是:我如何确定我的代码中没有办法使用 SQL 注入(inject)?我为此找到了一些指南,但我不确定如何让它们与我的代码一起工作。

<?php
if(isset($_POST['submit'])){
    $pvm = date("F j, Y"); 
    $postId = $_GET["post"]; 
    $lahettaja = $_POST['name']; 
    $kommentti = $_POST['comment'];

    $sql = "INSERT INTO kommentti (post_id,kommentti_pvm,kommentti,lahettaja) VALUES (:post,:kommentti_pvm,:kommentti,:lahettaja)"; 
    $kysely = $yhteys->prepare($sql); 
    $kysely->bindParam("post", $postId); 
    $kysely->bindParam("kommentti_pvm", $pvm); 
    $kysely->bindParam("kommentti", $kommentti); 
    $kysely->bindParam("lahettaja", $lahettaja); 
    $kysely->execute(); 
}
?>

最佳答案

您已经可以防止 SQL 注入(inject)。防止它的唯一方法是使用具有适当参数化的准备好的语句。也就是说,为可能包含用户输入的每一件事 使用带参数的准备语句。你正在这样做,所以你的状态很好。

请注意:这意味着您可以将数据视为“干净”或安全的。例如,您不能从数据库中提取它并只是echo 它。这样做会使您面临一种称为 XSS 或跨站点脚本攻击(从技术上讲,在这种情况下为反射 XSS)的攻击。<​​/p>

有关更多信息和了解更多信息,请参阅:

关于php - 如何以简单的形式禁用 SQL 注入(inject)的可能性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38387446/

相关文章:

sql解析器(改变解析方式)

sql - ORA-00604 : error occurred at recursive SQL level 1

javascript - 如何在有关 td 旁边显示响应

php - Twig 循环遍历数组,值为 "."

Javascript (Vue.js) 无法在移动设备和其他连接的设备上运行,但可以在运行本地主机的桌面上运行

php - 如何根据 JavaScript 函数的结果使用 PHP 写入数据库? (面子书应用程式)

php - fb apps/mysql 中的字符

MySQL InnoDB 不同数据库之间的外键

mysql - 如何设置 CakePHP 调试 SQLdump 限制

sql - 如何查找重复项(正确方法)?