
安全漏洞
|
321
绑定参数 :
$sql = $db->prepare("SELECT count(*) FROM users
WHERE username = :username AND password = :hash");
$sql->bindParam(":username", $clean['username'], PDO::PARAM_STRING, 32);
$sql->bindParam(":hash", hash($_POST['password']), PDO::PARAM_STRING, 32);
由于绑定参数可以确保在上下文中被认为非正常的数据不会进入(即不会被错误解释),
因此不必转义用户名和密码。
文件名漏洞
很容易构造出一个出乎意料的文件名指向其他内容。例如,你有一个变量
$username
包含用户想叫的名字,用户通过表单指定它。现在你要为每个用户在
/usr/local/lib/
greetings
中存储一个欢迎信息以让用户何时登入你的程序时都能输出信息。打印当前用
户欢迎信息的代码如下 :
include("/usr/local/lib/greetings/{$username}");
看起来没有恶意,但当用户选择
"../../../../etc/passwd"
作为用户名时呢
?
包含欢迎
信息的代码现在包含了这个相对路径而成为
/etc/passwd
。相对路径是黑客用来欺骗无防
范脚本的常用技巧。
对粗心程序员来说的另一个陷阱是,默认情况下,
PHP
可以用打开本地文件的函数来 ...