클라이언트 측 앱에서 그런 종류의 보안 제어를 시도하는 것은 효과가 없습니다. 예를 들어, Function.prototype
을 재정의 할 수 있다고하더라도 권한이없는 사용자는 여전히 원래 기능으로 다시 덮어 쓸 수 있습니다. 또는 변수를 변경하여 권한을 부여하십시오. 또는 POST
요청을 작성하여 스크립트를 완전히 우회하여 직접 서버로 전송하십시오. 클라이언트 측 코드에서 수행하려는 작업을 절대적으로 시행 할 방법이 없습니다.
경우에는, 그러나, 당신이 편리보다는 보안을 위해이 일을하고,이 사항을 고려하십시오
// define your functions as usual
app.showCatVideo = function (...) { /* ... */ }
app.deletePage = function(...) { /* ... */ }
app.dropBombs = function(...) { /* ... */ }
// specify which ones are privileged
var privilegedFunctionNames = [ "deletePage", "dropBombs" ];
for(var i = 0; i < privilegedFunctionNames.length; i++) {
var funcName = privilegedFunctionNames[ i ],
, origFunc = app[ funcName ];
;
delete app[ funcName ];
// replace the function with this one
app[ funcName ] = function() {
// check the user
if(theUser.isPrivileged()) {
// call the original function with the arguments passed
return origFunc.apply(app, arguments);
}
else {
// hissy fit
alert("Unauthorized!");
}
}
}
를이 단지 기능을 가진 당신이 (privilegedFunctionNames
에서)를 지정하는 기능을 래핑 첫 확인 사용자가 특권을 가지며 s/he가있는 경우 기능을 호출하고 그렇지 않은 경우 경보를 울립니다.
내가 말했듯이, 이것은 이 아니며 보안 이점이 있습니다. 누군가가 FireBug를 사용하는 방법을 알고 있다면, 다른 클라이언트 측 트릭과 비교해도 반격 할 수 있습니다.
Function.prototype.call = function() {console.log ('helloooo');}를 실행 한 후'alert ('tomato');의 동작에 대한 설명이 정확하지 않습니다. 그것을 감안할 때, 심지어 당신이 무엇을 요구 하는지를 말하기는 어렵습니다. –
@Iburbur : 무슨 뜻인지 미안 해요? Chrome 콘솔 창에서 테스트 중이며 Function.prototype.call = function() {console.log ('hello')}을 추가하면 해당 페이지의 모든 함수 호출이 'hello'를 콘솔에 출력합니다. 그래서 예 : 경고 ('test')는 콘솔에 'hello'를 기록하는 경고를 표시하지 않습니다. 일부 기능을 사용하는 액세스 수준에 따라 페이지가 아닌 다른 페이지에서 실행할 수 있도록 게이트 키퍼 함수를 작성하려고합니다. –
@Eli_s는 로깅을하는'alert'가 아니고'.call'을 사용하는 콘솔입니다. 'alert ('tomato')'는'.call'을 사용하지 않습니다 – Esailija