[英]PHP Security - GET Variables, URL safe?
我正在创建一个非常基本的iPhone模拟器,而我想要做的就是将其放在一个位置,然后在我们拥有并想要放置它的任何站点上,都可以使用以下网址来调用它: http://www.example .com / iphone-test.php?url = http://www.example.com/mobile/
我需要注意什么可能不安全的东西吗? 没有涉及数据库或任何东西,但是以防万一有人想弄乱并在URL中放一些东西,我可以做些什么来帮助使其更加安全?
这是我的代码:
<?php
if(isset($_GET['url'])) {
$url = $_GET['url'];
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>iPhone Test</title>
<style type="text/css">
#iphone {
background:url(iPhone.png) no-repeat;
width:368px; height:706px;
position:relative;
overflow:hidden;
}
#iphone iframe {
position:absolute;
left:30px;
top:143px;
border:0;overflow:hidden;
}
</style>
</head>
<body>
<div id="iphone">
<iframe src="<?=$url;?>" width="307" height="443"><p>Your Browser does not support iFrames.</p></iframe>
</div>
</body>
</html>
<?php
}
?>
编辑:感谢您的所有帮助。 我做了一些研究,这是到目前为止的结果:
<?php
include_once 'filter.php';
$filter = new InputFilter();
if(isset($_GET['url'])) {
if (filter_var($_GET['url'], FILTER_VALIDATE_URL)) {
$url = $filter->process($_GET['url']);
?>
来源: http : //oozman.com/php-tutorials/avoid-cross-site-scripting-attacks-in-php/
类别: http : //www.phpclasses.org/browse/file/8941.html
你怎么看?
您应该使用PHP的filter_var
来检查其是否有效...
if (isset($_GET['url'])) {
if (filter_var($_GET['url'], FILTER_VALIDATE_URL)) {
$url = $_GET['url'];
}
}
如果任何人都可以访问此页面,则您正在打开XSS和网络钓鱼重定向的权限。 例如,尝试将其添加到您的URL参数中:
?url="></iframe><script>alert(123)</script>
在Firefox 6.02中会触发警报。 这意味着任何JS都可以被触发并用于重定向认为他们正在访问您的网站的用户。 或者它可以用来窃取未标记为HTTPOnly的cookie。
可以通过对HTML属性进行编码来缓解这种情况。 OWASP在这里对此进行了描述:
除字母数字字符外,请使用&#xHH;转义ASCII值小于256的所有字符。 格式(或命名实体,如果有的话),以防止切换出该属性。 该规则之所以如此广泛,是因为开发人员经常将属性置于未引用状态。 正确引用的属性只能用相应的引用转义。 可以用许多字符来分隔未引用的属性,包括[space]%* +,-/; <=> ^和|。
参考: https : //www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet# RULE_.232_-_ Attribute_Escape_Before_Inserting_Untrusted_Data_into_HTML_Common_Attributes
现在,针对您的其他问题,以上将解决。 如果您只允许输入任意URL,则不会阻止某人执行以下操作:
?url=http://myevilsite.com/redirect.php
并让该页面重定向用户:
window.top.location.href = "http://www.site.com";
您唯一可以做的就是使用可接受的URL的白名单。
您需要100%毫无疑问地确保您的代码不会使用javascript劫持该框架,也不会将该人引向恶意域,或者导致您页面上的请求表单执行他们不需要的操作。
<IFRAME SRC="javascript:alert('XSS');"></IFRAME>
<iframe src=http://ha.ckers.org/scriptlet.html"></IFRAME>
无论如何,我可以窃取您的所有cookie,或欺骗用户以为它们仍在您的站点上,但实际上是我从中获取所有宝贵信息的地方。
停下来,在继续之前,您需要了解自己的工作, 然后从阅读本开始 。
您容易受到跨站点脚本的攻击。
所有人要做的就是在URL中包含"></iframe><script>EEEEVVvvvillll!!!!
,或使用非HTTP / HTTPS URI。
这是此处涉及的安全问题的列表。
iFrames安全性摘要
2007年10月24日,星期三,我决定收集我所做的各种概念证明,并总结为什么iframe会带来安全风险。 以下是主要原因:
- 浏览器跨域漏洞利用
说明:-因为您可以在页面内嵌入另一个网站,所以您可以利用该页面并以该用户的身份执行操作,并在所选网站上执行任何操作。
概念证明:-Safari beta 3.03零日
- XSS / CSRF反射攻击
描述:-使用嵌入到受感染站点中的iframe,攻击者可以将攻击反映到其他服务器,从而使攻击难以跟踪,并且无法进行攻击。
概念验证:-无法用于此类攻击,因为如果不实际进行攻击将很难展示该方法。
- CSS和iframe可以从互联网扫描您的LAN!
描述:-通过利用CSS中的功能并使用iframe检查默认IP地址是否存在,只要网络设备使用默认的开箱即用IP地址,就可以很容易地获得您的网络地址范围。
概念验证:-CSS LAN扫描器
- 使用Javascript和iframe进行局域网扫描
说明:-使用与上述类似的方法,可以使用Javascript获得您的LAN信息。
概念验证:-Javascript LAN扫描器
- CSS iframe叠加层
说明:-iframe可以相互嵌入到Firefox中,并且您可以更改其外观以在任何网站上创建无缝覆盖。 这将使用户很难知道他们正在与哪个站点进行交互并使他们愚蠢地执行操作。
概念验证:-Verisign OpenID漏洞利用(现已修复)
- URL重定向
说明:-iframe还允许您执行重定向,因此您可以访问通常无法访问的URL。 在美味示例中,POC从美味/家庭重定向到您的帐户书签,然后使用CSS覆盖显示您的第一个书签。 POC需要Firefox和美味帐户。
概念验证:-精美的CSS覆盖/重定向
您可以像代理一样使它更安全,在PHP中加载请求的URL,从HTML(javascript等)中删除所有内容,然后将其显示在指向服务器上网页的iframe中
只需使用strip_tags()
,就可以strip_tags()
所有恶意脚本项:
$url = strip_tags($_GET['url'])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.