【发布时间】:2014-01-16 08:14:36
【问题描述】:
所以我已经在同一个文档中验证并清理了我的表单数据。在我开始看到有关 'my_real_escape_string' 的东西之前,我一直认为它是安全的。
我认为,如果我按自己的方式输入数据,我的数据将是安全的,但我不想冒险。所以我的问题是我是否需要使用这个'my_real_escape_string' 来确保数据安全。
我正在使用下面的代码。首先将是表单文档 (index.php) 本身,然后处理 document(processform.php)。感谢您的所有帮助。
//index.php
<?php
// define variables and set to empty values
$first_nameErr = $last_nameErr = $emailErr = $passwordErr = $genderErr = "";
$first_name = $last_name = $email = $password = $gender = "";
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
if (empty($_POST["first_name"]))
{$first_nameErr = "";}
else
{
$first_name = test_input($_POST["first_name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$first_name))
{
$first_nameErr = "Only letters allowed";
}
}
if (empty($_POST["last_name"]))
{$last_nameErr = "";}
else
{
$last_name = test_input($_POST["last_name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$last_name))
{
$last_nameErr = "Only letters allowed";
}
}
if (empty($_POST["email"]))
{$emailErr = "";}
else
{
$email = test_input($_POST["email"]);
// check if e-mail address syntax is valid
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
{
$emailErr = "Invalid email format";
}
}
if (empty($_POST["password"]))
{$passwordErr = "";}
else
{$password = test_input($_POST["password"]);}
if (empty($_POST["gender"]))
{$genderErr = "";}
else
{$gender = test_input($_POST["gender"]);}
}
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<div class="signupitsfree" float="right">
<p class="signup">Sign Up<br />It's Completely Free!</p>
<form method="POST" name="signup" action="processform.php">
<label for="first name"></label><input id="first name" name="first_name"
placeholder="First Name" type="text" value="<?php echo $first_name;?>" /> <span
class="error">* <?php echo $first_nameErr;?></span>
<label for="last_name"></label><input id="last name" name="last_name"
placeholder="Last
Name" type="text" value="<?php echo $last_name;?>" />
<span class="error">* <?php echo $last_nameErr;?></span>
<br><br>
<label for="email"></label><input id="email" name="email" placeholder="Email"
type="text" value="<?php echo $email;?>" />
<span class="error">* <?php echo $emailErr;?></span>
<br /><br />
<label for="password"></label><input id="password" name="password"
placeholder="Create
Password" type="password" />
<span class="error">* <?php echo $passwordErr;?></span>
<br /><br />
<label for="male"><strong>Male</strong></label> <input id="male" value="male"
<?php if (isset($gender) && $gender=="male") echo "checked";?>
name="gender" type="radio" />
<label for="female"><strong>Female</strong></label> <input id="female" value="female"
<?php if (isset($gender) && $gender=="female") echo "checked";?> name="gender"
type="radio" />
<span class="error">* <?php echo $genderErr;?></span>
<br /><br />
<label for="submit">"I Agree To <a href="#">Terms And Conditions"</a></label>
//下面是'PROCESSFORM.PHP'
<?php
$hostname="this is correct";
$username="thisalso";
$password="chicken";
$dbname="chiken also";
$db_conx = mysqli_connect($hostname, $username, $password) OR DIE ("Unable to
connect to database! Please try again later.");
if(mysqli_connect_errno()){
echo mysqli_connect_error();
exit();
}
$select = mysqli_select_db($db_conx,$dbname);
$first_name= $_POST["first_name"];
$last_name= $_POST["last_name"];
$email= $_POST["email"];
$password= $_POST["password"];
$gender= $_POST["gender"];
mysqli_query($db_conx,"INSERT INTO users (firstname, lastname, email, password, gender)
VALUES ('$first_name', '$last_name', '$email', '$password', '$gender')");
mysqli_close($db_conx);
header("Location: anotherpage.php")
?>
【问题讨论】:
-
mysql_*_escape_string不“清理”数据(也就是说,它超出业务规则的范围!):这是一种黑客行为以防止 SQL 注入。始终将业务规则应用于数据并使用占位符来防止SQL注入。它们是两个不同的问题。见stackoverflow.com/questions/60174/… -
使用 mysqli 你应该使用准备好的语句
-
@user2864740 好的,我想我现在明白了。那么作为网页设计师,您是否必须使用黑客来防止黑客入侵?
-
@user3066599 不。占位符不是黑客。业务规则(和其中的验证)不是黑客。占位符可防止 SQL 注入(或更改查询的 形状),而业务规则确保只允许“有效”数据。 (应适当键入数据库架构,以在适用的情况下提供故障安全规则/限制。)
-
如果您对此事有任何其他信息,我们会张开双臂接受,但我认为我在研究和发现的道路上是正确的。