好的,所以我和一个朋友正在做一个关于PHP安全性的迷你演示文稿(虽然我不是真正的PHP)并且他让我找到一些易受攻击的PHP代码的例子(一个易于SQL注入和所有其他类型的攻击的代码) ).我想知道是否有任何网站都有好的和坏的代码片段显示你应该和不应该编码?
基本上我会把它们放到我们的网站上,他会尝试破解它,然后我们将展示"适当的"网站,他会再次尝试破解它.
SQL注入很简单:
$var = $_POST['var']; mysql_query("SELECT * FROM sometable WHERE id = $var");
这很容易解决:
$var = mysql_real_escape_string($_POST['var']);
另一个常见的是XSS(跨站点脚本):
$var = $_POST['var']; echo "$var\n";
允许您注入从您的站点运行的Javascript.有几种方法可以解决这个问题,例如:
$var = strip_tags($_POST['var']);
和
$var = filter_var($_POST['var'], FILTER_SANITIZE_STRING);
一个非常常见的初学者的错误是忘记在重定向后终止脚本执行.
解决方案:
if ($_SESSION['user_logged_in'] !== true) { header('Location: /login.php'); exit(); }在普通浏览器中进行测试时可能会错过这种情况,因为浏览器通常会跟随
Location
标题而不会呈现脚本的任何输出.
标头可以被忽略,php脚本仍然在执行.即使用户未登录,私有函数仍会执行.
3> bobince..:哦,孩子,你不会缺少例子.只是谷歌PHP教程,其中每一个都有足够的漏洞填补阿尔伯特音乐厅.
结果1,w3schools.他们的第一个包含用户输入的例子是什么?
Welcome !
Bzzt.HTML注入,在每个示例代码中重复.他们的第一个数据库查询是什么?
$sql="INSERT INTO Persons (FirstName, LastName, Age) VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[age]')";Bzzt.SQL注入,你输了.下一个.
结果2,官方PHP教程.输出变量的第一个例子是什么?
echo $_SERVER['HTTP_USER_AGENT'];Bzzt.HTML注入.这不是一个容易被利用的,但仍然是在php.net的学习资料中重复的那种不好的做法.
结果3,tizag.com.回声用户输入的第一个例子是什么?
echo "You ordered ". $quantity . " " . $item . ".
";Bzzt.
结果4,freewebmasterhelp.com.太基本了,包括很多,但仍然管理:
print "Hello $name"; // Welcome to the userBzzt.
结果5,learnphp-tutorial.com.
= $greeting ?> World! BZ ...
我可以继续
难道奇怪的是,野外PHP代码的一般质量是如此灾难性,当这个糟糕的垃圾是编码员学习的时候?
我最喜欢的是Apress书"Pro PHP Security".作者简要介绍了常见的漏洞,并为每个漏洞提出了一个解决方案(通常是一个非常不合适的解决方案,比如通过SQL转义映射POST).然后在解决其他漏洞的其他示例中,他再次弄错了,让代码遭受他刚刚在上一章警告我们的漏洞.XSS章节甚至在其如何避免略有不同的XSS漏洞的示例中存在XSS漏洞.关于使用`eval`和`system`的相当可怕的部分.确实是"亲"安全.
4> Jon Winstanl..:鲍比表
Bobby Tables是一个专门用于详细说明脚本通过SQL注入易受攻击的方式的页面.这不是PHP独有的,但是,SQL注入是导致许多网页漏洞的原因.
您可能希望在演示文稿中包含这些内容.