2010-05-06 5 views
2

이전에 작성한 코드를 다시 살펴보면 끔찍한 결과가 나왔습니다. 나는 데이터베이스에 기록을 삭제할 때마다 , 나는 다음과 같이했다 :아약스 보안?

$.post("deleteAction.do",{recordId:10}); 

나는 악의적 인 사용자가 직접 내 데이터베이스 작업의 URL을 방문 막을 수 없습니다 : 이런 종류의 솔루션 무엇

deleteAction.do?recordId=10 

을 문제가 뭐야?

답변

3

정말로 당신의 데이터와 당신이 서버 측에서하는 점검에 달려 있습니다. 예를 들어. 사용자가 해당 레코드에서 삭제 작업을 수행 할 수 있는지 확인하면 큰 문제는 아닙니다. 그렇지 않으면 사용자가 다른 사용자의 데이터도 삭제할 수 있음을 의미합니다. 내 제안은 :

  1. 사용자가 다른 데이터를 삭제하지 못하도록 서버 측에서 추가 검사를 추가하십시오.
  2. 정수를 사용하는 대신 guids 또는 변경할 수없는 다른 식별자 (읽기 : 예측 불가능)를 사용할 수도 있습니다. 이렇게하면 "스마트 헤드"가 응용 프로그램을 무너 뜨리는 것을 방지 할 수 있습니다.
1

서버 측 코드는 현재 로그인 한 사용자를 확인하고 항목을 삭제할 권한이 있는지 확인해야합니다. 이렇게하면 낯선 사람이 악의적 인 행동을하지 않게되지만 웹 응용 프로그램에 권한 부여/권한 부여 항목을 추가해야합니다.

1

이 문제를 방지하는 유일한 방법은 사이트에서 인증을 사용하고 일부 사용자 만 이러한 작업을 수행 할 수있게하는 것입니다. 모든 공개 활동은 악의적 인 사용자가 액세스 할 수 있습니다.

2

Ajax와 관련이 있는지 여부는 중요하지 않습니다. URI가 서버에서 민감한 데이터를 노출하거나 중요한 데이터를 노출하는 경우이를 보호해야합니다. 대개 어떤 형태의 인증 + 승인. 쿠키 기반의 기술은 정상입니다. 구현의 세부 사항은 백엔드 시스템의 설계에 따라 다릅니다.

제쳐두고 non-safe actions에 대한 GET 요청을 허용해서는 안됩니다. 요청이 POST이므로 문제의 GET 예를 사용하면 "This is a POST request?"를 추가해야합니다. 서버 측 스크립트를 확인하십시오. 이 방법만으로는 보호가 충분하지 않으므로 악의있는 ​​사용자는 임의의 GET 요청과 거의 같은 방식으로 임의의 POST 요청을 할 수 있습니다. (어느 것이 우리를 Authen/Authz로 데려옵니다)