0

不确定是什么问题,因为脚本在以前的页面上工作,获取已将 user_id 分配给当前活动用户的“文件夹”。

我在这一项中尝试做的与以前相同,但不是根据分配给它们的 user_id 从 SQL 中获取文件夹信息,而是尝试获取分配给它们的文件夹 id 的文件。

这是示例查询: ?o=folder&fid=0ec741fa-e708-4314-83c4-c05966a56110#!/New_Folder

?o=folder将 folder.php 传递给 index.php,它为所有内部文件提供服务

&fid=0ec741fa-e708-4314-83c4-c05966a56110是文件夹 ID,而不是实际 ID,因为文件夹表 ID 和 FID 中有两个字段,这是唯一生成的 FID,用户创建一个新文件夹,并自动分配 ID作为表中的 AUTO_INCR + 主键。

这是 PDO 脚本

require ("sql/pdo.php");

    // Lets get user's folder information
    $query = " SELECT * FROM files WHERE fid = ".$_REQUEST['fid']." "; 

    try 
    { 
        // These two statements run the query against your database table. 
        $stmt = $db->prepare($query); 
        $stmt->execute(); 
    } 
    catch(PDOException $ex) 
    { 
        // Note: On a production website, you should not output $ex->getMessage(). 
        // It may provide an attacker with helpful information about your code.  
        die("Failed to run query: " . $ex->getMessage()); 
    } 

    // Finally, we can retrieve all of the found rows into an array using fetchAll 
    $rows = $stmt->fetchAll(); 

?>
<table width="100%"> 
    <?php foreach($rows as $row): ?> 
        <tr onclick="window.location = 'file.php?fid=<?php echo htmlentities($row['id'], ENT_QUOTES, 'UTF-8')."'"> 
            <td style="width:4%;"><img src="ast/images/fs-directory.png" /></td>
            <td style="width:86%;text-align:left;"><?php echo htmlentities($row['name'], ENT_QUOTES, 'UTF-8'); ?></td>
            <td style="width:10%;text-align:center;"><?php echo htmlentities($row['privacy'], ENT_QUOTES, 'UTF-8'); ?></td> 
        </tr> 
    <?php endforeach; ?> 
</table> 

没有错误或返回任何内容,erro_log 文件中也没有任何内容,正如我所说,这很奇怪,因为它适用于文件夹但不适用于文件表。我假设这可能与他们处理数据的方式有关。为了从文件夹中获取数据,它请求分配给 uid (user_id) 的任何文件夹,这在术语上是一个数值,在这里我们使用一个非数值,而是一个随机文件夹字符串,这可能是问题的根源,但是它真的不应该。

关于代码可能有什么问题的任何建议?

4

1 回答 1

3

正如我所看到的,fid当您将其添加到查询而不是字符串时,它包含字母数字值。

另外,我希望您知道您的代码允许的 sql 注入。

因此,最好将直接放置更改为使用准备好的语句。在这个标签下有很多例子。

于 2012-12-25T18:47:46.973 回答