2015-08-31 4 views
0

Я работаю на довольно простом сервере Node, но мне нужны некоторые рекомендации о том, как предотвратить доступ из нежелательного происхождения.Безопасность Node.js - сквозной доступ?

Мой сервер обслуживает две страницы - имена страниц отображаются в третьем блоке кода.

Обе страницы подключаются к базе данных Mongo.

Чтобы проверить инъекции сценария, я использую следующий код и запускать его локально с помощью простого .html файла:

quizxhr = new XMLHttpRequest(); 
var url = 'https://cryptic-sierra-4333.herokuapp.com/putQuizData'; 
quizxhr.open("POST", url, true); 
quizxhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
quizxhr.onreadystatechange = createMarkers(); 
quizxhr.send(quizItemToSend); 

и

xhr = new XMLHttpRequest(); 
var url = 'https://cryptic-sierra-4333.herokuapp.com/putHackedData'; 
xhr.open("POST", url, true); 
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xhr.onreadystatechange = displayHackedData 
xhr.send(itemToSend); 

Попытки предотвратить другое происхождение от обращений к базы данных, я попытался использовать эту строку:

response.header("Access-Control-Allow-Origin", "https://cryptic-sierra-4333.herokuapp.com/", "https://cryptic-sierra-4333.herokuapp.com/admin"); 

Это не помешало моему местному fi le от доступа к базе данных.

Я потратил некоторое время на изучение возможных решений, но ничто не показалось мне очевидным решением. Возможно, я не очень хорошо разбираюсь в своей проблеме, или мне может не хватать ключевой словарный запас.

Любая помощь будет принята с благодарностью.

Заранее спасибо.

+0

Локальные файлы, вероятно, происходят из одной и той же сети. Из какой сети происходят локальные файлы? Пробовали ли вы это из несетевого местоположения и/или имели ли ваш местный запрос обманывать запрос иностранного происхождения? CORS предназначен для остановки запросов на внешнюю сеть (или их разрешения). – Shilly

+0

Заголовки Access-Control будут препятствовать отправке запросов, которые в противном случае вы не смогли бы отправить через стандартную HTML-форму. В этом случае вы делаете запрос POST с типом содержимого 'application/x-www-form-urlencoded'. Это легко сделать с обычной формой HTML и, следовательно, не будет предотвращено браузером. Если вы измените метод HTTP на «PUT» или измените тип контента на «application/json», вы должны увидеть, что браузеры предупреждают об этом. – idbehold

+0

@Shilly Мое приложение работает на Heroku, и я запускаю hack-файл .html локально. После запуска локального взлома, обновление на Heroku показывает новые записи в базе данных. Я считаю, что это адекватно проверяет запрос иностранного происхождения, нет? – user3342322

ответ

0

Попробуйте добавить следующее промежуточное программное обеспечение для вашего NodeJS/Экспресс-приложение (я добавил некоторые комментарии для вашего удобства):

// Add headers 
app.use(function (req, res, next) { 

// Website you wish to allow to connect 
res.setHeader('Access-Control-Allow-Origin', 'https://cryptic-sierra-4333.herokuapp.com/", "https://cryptic-sierra-4333.herokuapp.com/admin'); 

// Request methods you wish to allow 
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); 

// Request headers you wish to allow 
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); 

// Set to true if you need the website to include cookies in the requests sent 
// to the API (e.g. in case you use sessions) 
res.setHeader('Access-Control-Allow-Credentials', true); 

// Pass to next layer of middleware 
next(); 
}); 

Надежда, что помогает!

+0

Спасибо за этот шаблон, однако у меня уже был этот код, реализованный в моем файле server.js (за исключением строки Access-Control-Allow-Credentials). К сожалению, это само по себе не решило мою проблему. Мне не хватает деталей? – user3342322

Смежные вопросы