현재 사용자 정보에 기반한 논리적 보안 관련 작업을 하고 있습니다. 예를 들어, if this topic.creator.username to be equals to User.current().username 조건을 만족하면 사용자가 주제를 편집하거나 제외할 수 있도록 허용하는 방식이죠.
즉, 핵심은 사용자 세션에 기반한 특정 작업을 보장하는 것입니다. 그런데 몇 가지 테스트를 해보았고, 그래서 지금 여러분에게 질문을 드리게 되었습니다.
웹 브라우저의 JavaScript를 통해(프로덕션 모드에서도) Discourse.User.current().set('username', 'sometestename')을 실행할 수 있습니다. 이렇게 하면 제 시스템에서 특정 작업이 활성화될 수 있습니다. 이것이 99%의 사용자의 의도는 아닐 수 있지만, 이 경우를 넘어 사용자가 사용자 정보를 조작하지 못하도록 하는 방법이 있는지 아시는 분이 있을까요?
저는 보안 전문가가 아니라 그냥 앱 개발자일 뿐이지만, 모든 영속적 변경은 서버에서만 수행할 수 있습니다. EmberJS에서 브라우저에서 일어나는 일은 사용자의 편의성과 뛰어난 사용성 경험을 위한 것이지요. 예를 들어, 속도를 위한 캐싱이나 자동으로 앱처럼 동작하는 인터페이스 같은 것들이요. 결국 모든 영속적 변경은 Rails 서버와 협상해야 한다는 사실은 변하지 않으며, 이 과정에서 로그인된 사용자에 대해서만 권한이 부여됩니다.
모든 데이터 검색도 마찬가지입니다. Rails 서버는 로그인된 사용자에게 공개된 데이터만 전송할 뿐이죠.
이 부분에 대해 걱정할 필요 없다고 생각합니다. 누군가 이를 우회하려고 시도한다면 첫 번째 단계에서 막히기 때문입니다. API를 속이는 방법은 없으니까요.