1.sql注入
运用mysqli_real_escape_string函数对数据进行转义
$db = new mysqli(localhost, root, root, test);
$_POST[username] = "Shershon or 1=1";
$username = mysqli_real_escape_string($db, $_POST[username]);
$query = "select * from test where username=" . $username . "";
echo $query . <br />;
$res = $db->query($query);
echo $res->num_rows . <br />;
if ($res && $res->num_rows) {
echo "<br />Logged in successfully";
} else {
echo "<br />Login failed";
}
运用mysqli或pdo的预处理语句
$db = new mysqli(localhost, root, root, test);
$_POST[username] = "Shershon";
$query = "select * from test where username=?";
if ($stmt = $db->prepare($query)) {
$stmt->bind_param("s", $_POST[username]);
$stmt->execute();
$stmt->bind_result($id, $username);
while ($stmt->fetch()){
echo $id . , . $username;
echo <br />;
}
$stmt->close();
}
2.xss攻击
运用htmlentities这个函数转换所有含有对应“html实体”的特殊字符,例如货币暗示符号欧元英镑等、版权符号等,htmlspecialchars 只是把某些特殊的字符转义了 & " < >
<?php
if (file_exists(comments.txt)) {
$comments = file_get_contents(comments.txt);
} else {
$comments = ;
}
if (isset($_POST[comment])) {
$comments .= "\r\n" . htmlentities($_POST[comment]);
file_put_contents(comments.txt, $comments, FILE_APPEND);
}
?><form action=test.php method=POST> Enter your comments here: <br />
<textarea name=comment></textarea> <br />
<input type=submit value=Post comment />
</form><hr /><br /><?php echo $comments; ?>
3.会话固定
会话安全,假设一个PHPSESSID很难猜测。然而,PHP能够接受一个会话ID经过一个Cookie或URL。因此呢,诈骗一个受害者能够运用一个特定的(或其他的)会话ID 或钓鱼攻击。
4.会议捕捉或劫持
这是与会话固定有着一样的想法,然而,它触及窃取会话ID。倘若会话ID存储在Cookie中,攻击者能够经过XSS和JavaScript窃取。倘若会话ID包括在URL上,亦能够经过嗅探或从代理服务器那得到。
防止会话捕捉和劫持
1),更新ID
2),倘若运用会话,请保证用户运用SSL
5.跨站请求伪造(CSRF)
CSRF攻击,指的是一个页面发出的请求,看起来就像是网站的信任用户,但不是故意的。它有许多的变体,例如下面的例子
<img src=./test.php>
防止跨站点请求伪造
一
|