Bu AJAX istekleri için sunucu tarafında kimlik doğrulaması gerektiren bir ön uç bir proje için çalışıyorum ilk kez. Bu bana bir PHP Uyarı alacağı cuz, "hedef sayfanın" başlangıcı hattı olarak session_start
bir arama yapamazsınız gibi sorunlarla karşılaştı:
Warning: session_start() [function.session-start]:
Cannot send session cache limiter -
headers already sent (output started at C:\xampp\htdocs\comic\app\ajaxInsert
Book.php:1)
in C:\xampp\htdocs\comic\app\common.php on line 10
Ben bu ben bu PHP script "arayan" kimlik doğrulaması için PHP oturum değişkenleri kontrol etmekten başka bir yol bulmamız demektir saymak, ve bu benim yaklaşımdır:
JQuery ile formunu gönderdiğinde benim javascript "kapsayıcı" $.ajax();
yöntemi olarak kullanılması gereken bir "korumalı" PHP sayfası var
Benim "alıcı" PHP script olarak, ne var olduğunu:
<?php
define(BOOKS_TABLE, "books");
define(APPROOT, "/comic/");
define(CORRECT_REFERER, "/protected/staff/addBook.php");
function isRefererCorrect()
{
// the following line evaluates the relative path for the referer uri,
// Say, $_SERVER['HTTP_REFERER'] returns "http://localhost/comic/protected/staff/addBook.php"
// Then the part we concern is just this "/protected/staff/addBook.php"
$referer = substr($_SERVER['HTTP_REFERER'], 6 + strrpos($_SERVER['HTTP_REFERER'], APPROOT));
return (strnatcmp(CORRECT_REFERER, $referer) == 0) ? true : false;
}
//http://stackoverflow.com/questions/267546/correct-http-header-for-json-file
header('Content-type: application/json charset=UTF-8');
header('Cache-Control: no-cache, must-revalidate');
echo json_encode(array
(
"feedback"=>"ok",
"info"=>isRefererCorrect()
));
?>
Benim kod çalışır, ancak bu yaklaşımda herhangi bir güvenlik riskleri var acaba? O arayan javascript "korumalı" sayfasından olduğunu iddia böylece birisi sonrası isteği işleyebilirsiniz?
UPDATE:
just realized I can let javascript from the secured page generate a unique token per ajax request, and use the passed token value to authenticate whether it is a "genuine ajax call" from the secured page
Bu çok daha iyi olacak? Veya sadece sonrası isteğinin içeriğini şifrelemek gerekir?
UPDATE AGAIN :
After two hours of looping through the included pages, I finally noticed that this weird situation was caused by my PHP page encoding...
I gave Notepad++ a try and carelessly chose the page encoding as UTF-8 with Byte Order Marker, so I kept getting the warning message due to the "weird" interpretation of this line:
<?php
A good lesson for me...
Herhangi bir ipucu ya da önerileri çok teşekkürler.