我是否需要进一步确保删除表格

时间:2015-02-12 22:09:59

标签: php security

我有一个需要管理员访问权限才能执行某些功能的网站 - 其中一个功能是删除表格中的行。 所以我通过使用会话登录作为标准来保护页面,我可以在网站的根文件夹中看到.htaccess文件。

为了执行删除,管理员用户将单击删除按钮,而在页面上看不到删除查询时,可以在隐藏值中看到表名,因为根据单击的删除按钮,将使用标准mysqli_query清除不同的表。

<form method='POST' action='deleteData.php' target="_blank">
<input type='hidden' value="table_name_one" name='tbl'>                             
<input type='submit' value='Delete'>
</form>

<form method='POST' action='deleteData.php' target="_blank">
<input type='hidden' value="table_name_two" name='tbl'>                             
<input type='submit' value='Delete'>
</form>

deleteData.php仅在用户输入更多确认密钥后删除

<?php
if (($_SERVER['REQUEST_METHOD'] === 'POST') && (isset($_POST['delete']))){
    if ($_POST['delete_conf'] === 'DELETE') {
         //connect
         //mysqli_query DELETE FROM table_name

         ...
?>
     <body>
        <p>Confirm key:
        <input type="text" name="delete_conf" id="delete" value="" /> 
        <input type='hidden' value="<?php if (!empty($tbl_name)) { echo $tbl_name; } ?>" name='tbl'>
        </p>
<input type='submit' name="delete" value='DELETE!'>

所以我想知道,使用login / htaccess安全性,我是否需要进一步保护页面?如何妥协呢?

我可以看到使用开发工具,考虑到表名是在表单提交按钮内,并且可以在用户查找其他表名时进行更改。

1 个答案:

答案 0 :(得分:2)

(1)确保使用PDOmysqli的准备好的陈述 (2)根据有效值列表检查tbl值,以便用户不能将其更改为他们想要的任何表。

if(in_array($_POST['tbl'], array('table_name_one', 'table_name_two')))
{
   ....
}
else
{
  echo 'stop trying to hack';
}