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