2013-10-04 2 views
0

나는 이미지를 업로드 & 업로드 스크립트를 개발했습니다. 이미지는 webroot/images와 같은 디렉토리에 저장됩니다. 게시 버튼을 클릭하면 각 사용자 업로드와 관련된 파일 이름이 데이터베이스에 저장됩니다. 그때까지 미리보기를 표시 할 수 있도록 이미지가 순서대로 업로드됩니다. 모두 사용자가 다른 사용자 이미지를 삭제할 수있는 보안 취약점을 제외하고는 정상적으로 작동하는 것 같습니다. 예 : 모든 사용자가 이미지 &의 파일 이름을 복사하여 삭제 스크립트에 삽입 할 수 있습니다. 이 문제를 방지 할 수있는 메커니즘이 있습니까?이미지 보안 취약점 삭제

희망이 설명은 지루하지 않습니다. 설명하기가 약간 힘듭니다.

답변

2

이미지 파일 이름을 저장하는 데이터베이스 테이블에서 이미지를 소유 한 user_id의 필드를 추가하십시오.

삭제 작업이 호출되면 테이블에서 조회하여 현재 로그인 한 사용자가 삭제하려는 이미지와 연결되어 있는지 확인하십시오. 표의 user_id이 로그인 한 사용자와 일치하지 않으면 삭제를 허용하지 마십시오.

+0

답변 해 주셔서 감사합니다. 내가 시스템을 개발 한 방식은 모든 이미지가 업로드되고 사용자가 게시 버튼을 클릭 할 때까지 이미지가 디렉토리에 저장된다는 것입니다. 그때까지는 이미지가 webroot/images 폴더에 있으므로 라이브 미리보기를 제공 할 수 있습니다. 그들이 행복하지 않다면 그들은 이미지의 링크를 끊을 수 있습니다. 그리고이 과정에서 나는 그/그녀가 모든 이미지를 업로드 할 때까지 해당 사용자와 관련된 이미지 이름을 저장하지 않습니다. 그래서 나는 그것이 누구인지를 확인할 방법이 없습니다. – codeGEN

+1

이것이 이것이 (또는 적어도 가장 빠른 것) 일어나는 것을 허용하는 유일한 방법이라고 생각합니다. 이를 위해 "ImageName"및 "Owner"필드가있는 다른 테이블을 추가 한 다음 MrCode의 제안을 따를 수 있습니다. 가까운 장래에 코드를 여러 번 변경해야 할 가능성이 높으므로이 조언을 고려해야합니다. – Vereos

+1

테이블에 저장하는 방법은 아직 게시 된 경우를 나타내는'published' 플래그를 설정하는 것이 좋습니다. 테이블이나 적어도 일종의 데이터 소스를 사용하여 사용자를 이미지에 연결하는 방법은 볼 수 없습니다. 게시되지 않은 경우에도 마찬가지입니다. – MrCode

1

업로드하기 전에 이미지의 파일 이름을 변경해야합니다. 이 경우 타임 스탬프가 가장 좋습니다. 보안 문제 때문에 이미지를 삭제하는 동안 현재 사용자가 파일을 소유하고 있는지 확인해야합니다.

+0

파일 이름을 md5 해시로 변경하고 있습니다. 그러나 이미지가 게시 된 후 일반인과 누구나 볼 수 있습니다. 따라서 파일 이름을 제공하는 이미지 src를 볼 수 있습니다. – codeGEN

+0

방금 ​​내 대답을 업데이트했습니다. –

+0

그게 내가 파일을 현재 사용자가 소유하고 있는지 여부를 검사 할 방법이 없다는 것입니다. 왜냐하면 사용자가 모든 이미지를 업로드하고 클릭 할 때까지 개별 사용자가 업로드 한 이미지의 파일 이름을 저장하지 않기 때문입니다. 게시 버튼. – codeGEN