好吧,所以我设置了一个小型系统,我可以通过管理面板添加页面,并让它们出现在主站点上。除了在管理面板中创建的html页面,我还有大约两个PHP页面,其中包含存储在数据库中的查询。
无论如何我使用'Eval'来调用它们,我读过它是不安全的。
虽然因为它只有来自管理面板的html代码[php代码被禁止并且如果在这些页面中发布就不会起作用]并且除非访问数据库,否则PHP页面是不可用的,这样安全吗?
一个PHP页面涉及用户注释,但所有HTML和PHP代码都从表单中删除。我测试了它涉及一些开发技术,但似乎都没有成功。
但为了我的目的,使用eval是否安全?有更好的解决方法吗?
代码:
<?php
if (isset($_GET['p']))
{
$stmt = $dbh->prepare('SELECT * FROM pages WHERE shortname = :p');
if (!$stmt->execute(array(':p' => $_GET['p'])))
{//
exit('Could not exec query with param: '.$_GET['p']);
}
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
eval(" ?>".$row["content"]."<?php ");
echo '</div>';
}
}
//ends connection
$row->dbh = null;
?>
答案 0 :(得分:0)
有时编写安全代码不仅仅是确保它是安全的。也许我们都会看看你的代码并认为它是安全的,但要监督一些小而明显的东西会造成很大的安全漏洞。
比抱歉更安全。你说[php codes are disallowed and wont function if posted in these pages]
那你为什么要使用eval?
返回您的代码。您发布的部件对我来说是安全的(对于评估部分)。但是如果你的应用程序中的其他地方有一些小的SQL注入漏洞让攻击者改变行怎么办?攻击者可以将PHP代码放入您的数据库中,然后使用您的eval语句执行它。
我会说:不,这段代码不安全。
此外,不要在错误中回显用户给定的内容,这可能会导致xss漏洞。