我避免sql注入的方法:: Html表单
<form method="post" action="" style="padding:0;">
<p> <span class="cclogin-addon"><i class="fa fa-user fa-2x fa-spin"></i></span>
<input type="text" name="firstname" value="" placeholder="First Name">
</p>
<p>
<p> <span class="cclogin-addon"><i class="fa fa-envelope fa-2x fa-spin"></i></span>
<input type="text" name="Email" value="" placeholder="Your Email">
</p>
<p>
<input type="submit" name="Login" value="Submit">
</p>
</form>
使用ajax我正在提交表单,我也在我的表单中实现了验证码。 在操作文件上,接下来是将数据保存到数据库的代码:
if(isset($_POST['Login'])&& ( $_POST['Login'] )) // submit button name
{
if($_POST['type_code']==$_SESSION['vercode']) // checking captcha code
{
$firstname = strip_tags($_POST['firstname']);
$email = strip_tags($_POST['email']);
$phone = $_POST['phone'];
$sql = "INSERT INTO table_name (firstname,email,phone)
VALUES ('".$firstname."', '".$email."','".$phone.")";
if ($conn->query($sql) === TRUE) {
echo ‘records save successfully’;
}
Else
{
Echo ‘not saved data’;
}
但是在跨站点脚本扫描后我得到了很多sql注入错误 例如 :: URL编码的POST输入firstname设置为ttqevjod“onmouseover = prompt(949671)
输入反映在双引号之间的标记参数内。 为避免此类错误,我的第二种方法是限制用户将转义序列字符输入文本字段
如下:: 1.检查按键事件
function blockSpecialChar(id)
{
var spclChars = "!@#$%^&*,\'\"(;:?.|-_)<>&[]{}+=`\/";
var content = $('#'+id).val();
for (var i = 0; i < content.length; i++)
{
if (spclChars.indexOf(content.charAt(i)) != -1)
{
alert ("Special characters are not allowed.");
$('#'+id).val('');
return false;
}
}
}
While saving data
if(isset($_POST['Login'])&& ( $_POST['Login'] )) // submit button name
{
if($_POST['type_code']==$_SESSION['vercode']) // checking captcha code
{
$firstname = htmlspecialchars ($_POST['firstname']);
$email = htmlspecialchars ($_POST['email']);
$phone = htmlspecialchars($_POST['phone']);
$sql = "INSERT INTO table_name (firstname,email,phone)
VALUES ('".$firstname."', '".$email."','".$phone.")";
if ($conn->query($sql) === TRUE) {
echo ‘records save successfully’;
}
Else
{
Echo ‘not saved data’;
}
但是我的主管说这是防止sql注入的错误方法。请引导我正确的防止sql注入的方法。