Это первый раз, когда я работаю над интерфейсным проектом, для которого требуется аутентификация на стороне сервера для запросов AJAX. Я столкнулся с проблемами, как я не могу сделать вызов session_start
как начало линии «целевой страницы», Потому что бы получить меня PHP Warning:PHP проверить HTTP-референт на форму, представленную AJAX, безопасно?
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
Я считаю, это означает, что я должен выяснить иначе, чем проверка переменных сеанса PHP для аутентификации «вызывающего» этого скрипта PHP, и это мой подход:
У меня есть «защищенная» страница PHP, которая должна использоваться как «контейнер» моего javascript, который публикует форму через jQuery $.ajax();
метод
В моем «приемном» скрипте PHP у меня есть:
<?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()
));
?>
Мой код работает, но мне интересно, существуют ли какие-либо риски безопасности при таком подходе? Может ли кто-нибудь манипулировать почтовым запросом, чтобы он мог притворяться, что JavaScript-адрес вызывающего абонента находится с «защищенной» страницы?
UPDATE:
просто понял, что я могу позволить JavaScript с защищенной страницы генерирует уникальный маркер для каждого запроса AJAX, и использовать переданное значение маркеров аутентификации, является ли это «подлинным Аяксом вызова» из защищенная страница
Будет ли это намного лучше? Или я должен просто зашифровать содержимое почтового запроса?
UPDATE РАЗ:
После двух часов циклически включенных страниц, я наконец-то заметил, что эта странная ситуация была вызвана моей PHP страницы кодирования ...
Я дал Notepad ++ попробуйте и небрежно выбрали кодировку страницы как UTF-8 с маркером байтового порядка, поэтому я продолжал получать предупреждающее сообщение из-за «странной» интерпретации этой строки:
<?php
Хороший урок для меня ...
Большое спасибо любые намеки или предложения.
может быть, есть подпись Юникода (BOM):> Знак байтового заказа. Символ Юникода U + FEFF при использовании для указания > порядка байтов текста. [Источник] (http://unicode.org/glossary/#byte_order_mark) Проверьте это. –