当我使用iframe或框架(旧网站)时,作为额外的安全预防措施,我使用JavaScript函数:
<SCRIPT LANGUAGE="JavaScript1.1">
if (top == self) self.location.href = "../index.cfm";
</SCRIPT>
然后另一个隐藏的检查,以查看页面是否被正确调用....
<cfif (HTTP_REFERER DOES NOT CONTAIN "referer_page.cfm")
<cfabort>
</cfif>
很有可能让访问者(黑客?)无法打开和/或尝试发布到网页。
问题是JavaScript在源代码中显示,他们知道的越少......
我知道JS是客户端,但是无论如何都要在服务器端CF中创建该功能或以其他方式隐藏窥探?
我在我和我的大多数客户网站上运行cf9。
提前感谢
答案 0 :(得分:2)
不,任何服务器端语言都无法判断请求页面的客户端是否打算在帧内显示它。告诉它的唯一方法是在页面到达后询问浏览器。
Javascript可见的问题是什么?
答案 1 :(得分:2)
您可以使用 nothing 来永久避免客户端看到您的源HTML和/或Javascript。客户端的任何安全措施最终都是徒劳的。你将保留休闲(即非网络开发者或程序员)用户,但就是这样。任何对HTML有基本了解并且可以访问Google(或Alta Vista或者询问jeeves)的人都可以规避障碍。
HTTP_REFERER的使用在这里也是可疑的(我知道我知道......我是一个负面的Nellie :)。该CGI var依赖于浏览器和Web服务器协同工作。它总体上不可靠,因为它取决于客户端。通过简单地使用适当的引用来构建请求,没有任何好处的人将没有任何问题绕过障碍。
如果您想要服务器端安全性,那么您将被迫使用某种形式的身份验证和会话。这是一个不断发展的领域,oAuth和使用Google,FB,Twitter等作为联合认证服务。但是与登录会话相关联的普通旧用户名和密码也可以工作:)
答案 2 :(得分:1)
要明确的是,@ Luke说有些用户正确使用你的网站,查看iframe内容,如果他们有安全设置,如匿名程序,阻止他们的数据,如cgi变量,可能会有问题。
唯一真正的解决方案是在每个页面上进行适当的身份验证和过滤。如果列表显示用户的内容并将详细信息加载到iframe,则iframe的页面还必须检查用户是否具有访问权限。那时,他们是否能够获得网址并不重要。
例如,如果您获得这样的用户图像列表。
<cfquery name="getImageList">
select imageid,imagefilename_mini
from images
where userid = <cfqueryparam value="#session.userid#">
</cfquery>
加载iframe以加载完整大小的图像,您仍然需要和子条款
<cfquery name="getThisImage">
select imagefilename from images
where imageID = ...
and userID = ...
</cfquery>
这样,即使有人更改了网址中的图片ID,它仍然只允许他们看到绑定到用户ID的内容。
此外,现代浏览器使得改变实时页面的来源变得非常容易。我并不是说浏览器可以改变服务器端文件,我的意思是将DOM的内容传递给浏览器。它是一个非常有用的开发和调试工具,但它确实使恶作剧/恶意活动更容易。
在chrome和firefox中,您可以检查元素,更改属性,页面将在您眼前改变。这里适用于iframe src,因此它仍然在它期望的DOM中。
您应该将客户端UI视为您希望如何呈现页面,以及它最适合的方式,但使用服务器端保护(正确验证),因为它太容易绕过客户端控制的数据/元素。