如何以简单的形式禁用 SQL 注入的可能性?
How to disable SQL injection possibility in a simple form?
我有这个评论表单,其中唯一的输入是评论的名称和文本区域。
我的问题是:我如何确定我的代码中没有办法使用 SQL 注入?我为此找到了一些指南,但我不确定如何让它们与我的代码一起工作。
<?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 注入。防止它的唯一方法是使用具有适当参数化的准备好的语句。也就是说,为 可能包含用户输入的每个事物 使用带参数的准备语句。你做到了,所以你的状态很好。
请注意:这 不 意味着您可以将数据视为 "clean" 或安全。例如,您不能从数据库中提取它并仅 echo
它。这样做会使您面临一种称为 XSS 或跨站点脚本(从技术上讲,在这种情况下为反射 XSS)的攻击。
有关更多信息和了解更多信息,请参阅:
- OWASP PHP Security Cheat Sheet
- OWASP SQL Injection Prevention Cheat Sheet
- How can I prevent SQL injection in PHP?
我有这个评论表单,其中唯一的输入是评论的名称和文本区域。
我的问题是:我如何确定我的代码中没有办法使用 SQL 注入?我为此找到了一些指南,但我不确定如何让它们与我的代码一起工作。
<?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 注入。防止它的唯一方法是使用具有适当参数化的准备好的语句。也就是说,为 可能包含用户输入的每个事物 使用带参数的准备语句。你做到了,所以你的状态很好。
请注意:这 不 意味着您可以将数据视为 "clean" 或安全。例如,您不能从数据库中提取它并仅 echo
它。这样做会使您面临一种称为 XSS 或跨站点脚本(从技术上讲,在这种情况下为反射 XSS)的攻击。
有关更多信息和了解更多信息,请参阅:
- OWASP PHP Security Cheat Sheet
- OWASP SQL Injection Prevention Cheat Sheet
- How can I prevent SQL injection in PHP?