我一直在处理一些用于登录数据库的示例代码,并且作者提供了两个函数,用于使输入的数据对DB安全,几乎没有解释为什么在哪里使用。我试图弄清楚它是否是一种冗余,以及我是否应该根本不使用其中一种,因为它看起来很......呃...它的作用更轻。
这是第一个:
save.image(file="mysession.RData")
现在是第二个:
load("mysession.RData")
第一个代码(看起来更有用)看起来只是在将已发布的表单字段收集到数组中时才使用一次:
save()
第二种用法几乎可以在任何时候放入数据库中的表字段或从SESSION数据中提取,例如:
saveRDS()
我主要担心的是这似乎是多余的,但也许是因为我不理解它。你真的有理由要做这两件事吗?
/*
Sanitize() function removes any potential threat from the
data submitted. Prevents email injections or any other hacker attempts.
if $remove_nl is true, newline chracters are removed from the input.
*/
function Sanitize($str,$remove_nl=true)
{
$str = StripSlashes($str);
if($remove_nl)
{
$injections = array('/(\n+)/i',
'/(\r+)/i',
'/(\t+)/i',
'/(%0A+)/i',
'/(%0D+)/i',
'/(%08+)/i',
'/(%09+)/i'
);
$str = preg_replace($injections,'',$str);
}
return $str;
}
function StripSlashes($str)
{
if(get_magic_quotes_gpc())
{
$str = stripslashes($str);
}
return $str;
}
所以,
有什么区别?
我应该只使用其中一种吗?
我是否应该在其中一个或两个地方完全使用其他东西?
感谢您对此有所了解!
答案 0 :(得分:0)
IMO而不是使用特定的数据库驱动程序MySQLi,最好使用数据库抽象层。您可以使用PDO(PHP数据对象)。
<?php
/* Connect to a MySQL database using driver invocation */
$pdo = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$pdo = new PDO($dsn, $user, $password);
$stmt = $pdo->prepare('SELECT * FROM sessions WHERE email = :email');
// PDO will take care sanitizing the input so you do not need
// to manually quote the parameters
$stmt->execute([':email' => $_POST['email']]);
$result = $stmt->fetchAll();
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}