允许跨域的Ajax请求
在我的项目中,我需要允许其他人向我的脚本发送ajax请求。 所以外部请求可能来自其他网站和域名,也可能来自浏览器扩展。
我已经简单地在脚本的顶部添加了这两行代码:
header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST');
现在我的问题是这样的:在这里,我已经错过了安全考虑? 这个简单的解决scheme会造成严重的问
如果是这样,有什么更好的解决scheme?
感谢您的回应。
如上所述,任何人都可以随时向您发送页面请求:所以您需要的主要安全问题是validation用户input,并且只显示可供公众使用的信息。 但是这适用于所有脚本。
您需要关注的两个主要问题(在validation用户input之后)是:
- 您可能遇到的问题是用户将信息接收到脚本中。 根据浏览器(甚至是同一浏览器的不同风格),有不同的安全规则可阻止他们获取信息。 一个常见的解决scheme是提供信息作为“JSONP”,这是一个函数调用,可以由客户端执行包装您的返回值。 这是一个简单的例子(摘自http://www.geekality.net/2010/06/27/php-how-to-easily-provide-json-and-jsonp/ )。 为了进一步locking它,你可以坚持所有的查询都是JSONP并拒绝没有发送callback函数的人。
。
<?php header('content-type: application/json; charset=utf-8'); $data = array(1, 2, 3, 4, 5, 6, 7, 8, 9); echo $_GET['callback'] . '('.json_encode($data).')'; ?>
- 有人经常打电话滥用您的服务。 解决scheme是捕获IP地址,如果IP地址过多,则拒绝。 不是万无一失的,但这是一个开始。
其他因素要记住:
- 您的脚本设置的Cookie和其他标题可能会被忽略
- 同样适用于会议
就像zerkms所说,如果他们只是“去”你的PHP页面,他们将能够看到任何回声。 如果可能的话 (不知道这是什么),它也会允许不需要的人甚至在本地主机上创build他们自己的表单,并通过AJAX提交它们以得到他们想要的回应。如果这与你确定,并且信息是不明确的/无害…那么我想这将是“安全的”。 获取/传输敏感信息不是好方法
private function set_headers() { header("HTTP/1.1 ".$this->_code." ".$this->get_status_message()); header("Content-Type:".$this->_content_type); header("Access-Control-Allow-Origin: *"); }