我已经设置了一个简单的脚本,允许使用AJAX将数据发送到我的服务器:
$.ajax({
url: url,
type: method,
data: data
}).done(function(data) {
console.log(data);
});
现在,我已将以下访问控制允许规则添加到我的.htaccess
:
Header add Access-Control-Allow-Origin: "https://www.randomsite9734784.com"
Header add Access-Control-Allow-Methods: "DELETE"
这按预期工作:每当我发送 AJAX 请求时,我都会收到一条消息,指出源不匹配,等等,故事结束。完善。
现在,当我在 PHP 中使用我的 cURL 函数时,我设法执行了各种请求。我本来希望它有相同的响应,但不知何故它绕过了某种 .htaccess 文件。
我真的很想知道为什么会发生这种情况,以及如何保护自己免受这两种请求方法的影响。
谢谢!
编辑
仅供参考,这是我当前的 .htacess 文件:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Header add Access-Control-Allow-Origin: "http://somerandomdomain.com"
Header add Access-Control-Allow-Methods: "DELETE"
现在,要清楚:我想知道的只是如何确保(在这种情况下)只能从 somerandomdomain.com 执行删除请求,而不是来自各种位置的各种请求......
:-)谢谢。
jQuery/JavaScript 在客户端执行,浏览器应用跨源请求共享的限制。
服务器没有任何限制,只要 PHP 可以使用很多东西,例如 URL 和 fopen()
等。
这种限制的主要原因是,JavaScript 可以由客户端的任何人执行,而服务器端代码只能由有权访问服务器端脚本的人执行。当为新手用户提供要执行的 URL (AJAX 请求)时,它将在触发该 URL 的客户端上执行。
这打开了诸如访问域上的cookie,会话详细信息等问题。因此,例如,当您有一个可以使用GMail发送电子邮件的API时,并且您进入了一个恶意网站,则可能会有一个JavaScript,它可以触发AJAX请求说:
POST https://mail.google.com/api/mail/send
有一些细节,这会在您不知情的情况下执行,但使用您登录的凭据。这无法使用服务器端脚本来完成,因为没有什么比打开会话或流更受控制了。
我本来希望它有相同的响应,但不知何故它绕过了某种 .htaccess 文件。
你的.htaccess
很弱,可以要求潜入。因此,您需要更正.htaccess
文件。您可以发布.htaccess
文件的来源,以便我们也可以为您提供建议。
我希望这回答了你的问题。
对于您的情况:如果您可以使用 CURL ,请使用 CURL,但如果您真的想使用 ajax,则需要在客户端和服务器端添加 CORS 访问权限(这是您构建自己的 API 的情况)如果您使用 extern API 众所周知,他们应该添加一个关于 CORS 问题的主题,该主题解释了您必须将哪些标头添加到您的请求中才能使其工作。我希望你明白我在说什么