좋아, 그래서 레일에 사용할 수 있도록 Javascript 변수를 전달해야하는 페이지 중 하나에 내 레일 애플 리케이션. 이제 하나는 서버 측을 실행하고 하나는 클라이언트 측을 실행하므로 매우 어렵다는 것을 알고 있습니다. 나는 인터넷을 보았고, 내 외부 자바 스크립트 페이지에 포함 된 함수에서 동적으로 폼을 만드는 방법을 발견했다.레일이 CSRF를 감지 할 수 있습니까?
기본적으로 document.createElement
문을 사용하여 숨겨진 필드가있는 양식이 만들어졌으며 숨겨진 필드에 양식을 제출하기 위해 form.submit()
이 호출 된 값이 주어졌습니다. 양식에 게시 방법이 주어졌으며 이동 경로가 주어졌습니다. 그래서 제출할 때 페이지가 호출되어 숨겨진 필드가 이제 params 해시에 있고 다른 레일 페이지로 params[:param]
으로 액세스 할 수있는 다른 페이지로 리디렉션됩니다.
로그인 한 사용자를 추적하기 위해 세션을 사용할 때까지 잠시 동안 좋은 결과를 얻었습니다. 해당 동적 양식으로 리디렉션되도록 단추를 클릭하면 세션이 지워집니다. 내가 세션에서 지워지는 것에 대해 온라인에서 발견 한 유일한 사실은 레일스가 세션을 지우는 CSRF를 탐지했을 때입니다.
그럼 내가 레일스에서 CSRF를 감지하여 세션을 정리할 수 있습니까? 아무도 모르는 세션이 취소 될 수있는 다른 이유가 있습니까? 또한, 아약스없이 (왜냐하면 난 그걸로 망쳐 놨기 때문에 멋지게 놀지 않는다.) javascript 변수를 전달하는 또 다른 좋은 방법 메신저 (자바 스크립트가 있어야합니다, 나는 자바 스크립트 함수를 사용하고 있습니다. 사용자에게 현재 위치 가져 오기) 레일에 사용할 수 있도록하려면? (나는 폼을 javascripting하는 것보다 오히려 내 페이지에 숨겨진 폼을 만들 수도 있습니다. 소스를보고있는 누군가가 그것을 볼 수 있고 거기에 왜 그곳에 왜 있는지 궁금해하기 때문에 조금 덜 우아합니다.)
누군가가 관심이 있다면 아래는 내 동적 양식 기능을위한 코드입니다.
function post_to_url(path, params, method) {
method = method || "post"; // Set method to post by default, if not specified.
var form = document.createElement("form");
form.setAttribute("method", method);
form.setAttribute("action", path); //page to go redirect to when form submitted
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
//after form is submitted params is available by params[:location]
hiddenField.setAttribute("name", 'location');
hiddenField.setAttribute("value", params)
form.appendChild(hiddenField);
document.body.appendChild(form);
form.submit();
}
감사합니다. 당신은 신사이고 학자입니다. 너는 그것을 고쳤다 !!!!!!!!!!! 우리는 지금 2 일 동안 이것으로 고투하고있다 그리고 그것은 작동한다! !!! : DDDD – user1759942
네, 몇 달 전에 아약스로이 비트를 접해 주셔서 대단히 환영합니다. :) – agmcleod