我正在创建一个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);
现在我有两个问题。
我经常看到的一件事是,有时标题的某些部分会附加到网址上。像这样的东西:
mysite.com/document/1/some_part_of_the_url
但我已经检查过,如果我删除了标题并转到mysite.com/document/1
,它仍然会显示相同的网页。这让我觉得这不是出于安全原因,更像是一种帮助用户找出他要访问的页面标题的方法。
答案 0 :(得分:1)
some_part_of_the_url是在网址中提供一定程度的人类可读性,以便网页抓取工具(例如索引网页的googlebots)的利益...更高的人类可读性会影响搜索结果中该网页的“加权”。出于安全原因,这不是出于此目的。
不是将文档ID指定为自动增量,而是可以指定一个哈希值,使它们不是序列号,但这会增加代码的复杂性...设置记录ID的自动增量很有用。
您最好在网络服务器级别而不是脚本级别限制此操作(如果您在脚本级别应用此脚本,脚本仍需要开始运行以执行任何测试)
答案 1 :(得分:1)
标题通常附加到网址的原因是搜索引擎优化。
文件应该是安全的吗?如果是这样,您需要实现某种身份验证。默默无闻的安全措施,用户不会猜测ID不是一个好方法。您可以非常轻松地实现用户名/密码,即使用户名/密码被烘焙到代码中,然后使用会话来检查用户是否经过身份验证。
如果文件没有安全保障,那么我真的不需要担心身份验证。考虑一下,你可以通过访问stackoverflow.com/questions /#{id}来访问问题。
答案 2 :(得分:1)
我不明白的一件事是,这怎么会成为安全问题?
让某人使用抓取工具,就像访问网页的用户一样,对吗?那有什么不对呢?
如果您想阻止或限制对其的访问,您可以使用php session
功能并对其进行控制。
请注意,大多数安全问题可以通过STRICTLY仅检查EXPECTED INPUTS来防止,而不是考虑许多解决方案。
现在这是通过编码部分阻止你的应用程序。
但安全不仅仅是这个,错误配置的服务器,网络等也可能为您带来问题。