根据文档ID显示网站中的帖子

时间:2012-03-03 10:39:22

标签: php security

我正在创建一个php网站,其中我有document.php基本上需要did (document ID)并显示它。一个示例是mysite.com/document.php?did=1,它使用SELECT * FROM documents WHERE id=1之类的查询从数据库中获取文档内容。我知道这种方法的安全性问题(例如SQL注入),我同时进行验证和转义,但有些人告诉我的一点是,创建一个类似的东西的抓取工具非常容易:

for(int i = 0; i < 3000; ++i) 
   DownloadPage("mysite.com/document.php?did="+i);

现在我有两个问题。

  1. 这真的是我编写的代码的问题,还是有其他解决方案?例如,我知道我可以告诉Apache服务器限制一个IP的带宽使用。 (或者也许是你提出的更好的选择。)
  2. 如果这是一个问题,我会想到一个解决方案。我想我应该在页面中添加另一个参数。类似于内容的哈希值,将根据数据库检查以查看这是否是正确的URL。
  3. 我经常看到的一件事是,有时标题的某些部分会附加到网址上。像这样的东西: mysite.com/document/1/some_part_of_the_url但我已经检查过,如果我删除了标题并转到mysite.com/document/1,它仍然会显示相同的网页。这让我觉得这不是出于安全原因,更像是一种帮助用户找出他要访问的页面标题的方法。

3 个答案:

答案 0 :(得分:1)

some_part_of_the_url是在网址中提供一定程度的人类可读性,以便网页抓取工具(例如索引网页的googlebots)的利益...更高的人类可读性会影响搜索结果中该网页的“加权”。出于安全原因,这不是出于此目的。

不是将文档ID指定为自动增量,而是可以指定一个哈希值,使它们不是序列号,但这会增加代码的复杂性...设置记录ID的自动增量很有用。

您最好在网络服务器级别而不是脚本级别限制此操作(如果您在脚本级别应用此脚本,脚本仍需要开始运行以执行任何测试)

答案 1 :(得分:1)

标题通常附加到网址的原因是搜索引擎优化。

文件应该是安全的吗?如果是这样,您需要实现某种身份验证。默默无闻的安全措施,用户不会猜测ID不是一个好方法。您可以非常轻松地实现用户名/密码,即使用户名/密码被烘焙到代码中,然后使用会话来检查用户是否经过身份验证。

如果文件没有安全保障,那么我真的不需要担心身份验证。考虑一下,你可以通过访问stackoverflow.com/questions /#{id}来访问问题。

答案 2 :(得分:1)

我不明白的一件事是,这怎么会成为安全问题?

  • 让某人使用抓取工具,就像访问网页的用户一样,对吗?那有什么不对呢?

  • 如果您想阻止或限制对其的访问,您可以使用php session功能并对其进行控制。

  • 如果你想阻止用户总是使用id,你应该通过你的逻辑控制它,如果允许这样的会话用户访问你的特定文档id(很多逻辑方法来实现它。)

请注意,大多数安全问题可以通过STRICTLY仅检查EXPECTED INPUTS来防止,而不是考虑许多解决方案。

现在这是通过编码部分阻止你的应用程序。

但安全不仅仅是这个,错误配置的服务器,网络等也可能为您带来问题。