previous question I had postedに応答して、データベースをSQLインジェクションに開放しているという応答がありました。何のSQLインジェクションが発生しない可能性があることを確認するために「[-ZA-Z0-9]// ^」私は、サーバー側の検証チェックを行うことができますということでしたが、それは十分であるSQLインジェクションを防止するために必要なステップは何ですか?
<?php
$firstname = stripslashes(strip_tags($_POST['firstname']));
$lastname = stripslashes(strip_tags($_POST['lastname']));
$email = stripslashes(strip_tags($_POST['email']));
$title = stripslashes(strip_tags($_POST['title']));
$organization = stripslashes(strip_tags($_POST['organization']));
$pdbHost = "localhost";
$pdbUserName = "******";
$pdbPassword = "******";
$pdbName = "db1080824_emails";
// Connect to mySQL
$conlink = mysql_connect($pdbHost, $pdbUserName, $pdbPassword);
if(!$conlink) {die('Unable to connect to '.$pdbHost);}
if (!mysql_select_db($pdbName, $conlink)){die('Cannot find database '.$pdbName);}
//SQL query
$SQL2="INSERT INTO `db1080824_emails`.`emails` (`record_id` ,`firstname`,`lastname`,`email`,`title`,`organization`)VALUES (NULL , '".$firstname."', '".$lastname."', '".$email."', '".$title."', '".$organization."')";
mysql_query($SQL2);
// Connect to Closing the connection
mysql_close($conlink);
?>
提案:コードを以下に示します。データのサニタイズを確実にするために従うべきベストプラクティスがありますか?
http://en.wikipedia.org/wiki/SQL_injection - どのように行うの上よりHOを読みますwを "元に戻す" – Joseph
準備されたステートメントのみを使用します。期間。 – knittl
最初のステップ:** mysql_query **の使用を中止し、PDOやmysqliのような最新のAPIを使用します。両方とも、準備されたステートメントをサポートしています。これは、適切に使用されると、SQLインジェクションを防止するための手段になります。 – cHao