foreach문에 대해 질문드립니다.

foreach문에 대해 질문드립니다.

QA

foreach문에 대해 질문드립니다.

답변 2

본문

안녕하세요

매번 sir회원님들의 도움을 많이 받아가고있는 클래스는영원히라고합니다.

정말 감사드립니다.

 

오전에 질문글을 올렸었는데 댓글채택을 잘못눌러버려 다시 질문글을 올리게되었습니다.

이런적이 처음인데 질문글의 답변을 채택하면 질문글이 그냥 종결되어버리는것인지도 여쭙습니다^^;;

 

 

다름이아니라


foreach ($f_idx_arr as $f_idx) {
    $result = $db->Execute($stmt, array($f_idx));
}
foreach문에서 이렇게 나열되어있을경우는

http://www.foodmall2020.com/check_proc.php?f_idx=1234&SqlType=food_delete
이런식 단일값을 집어서 삭제를 못하는지 궁금합니다.
혹시 누가 상품을 외부에서 f_idx값을 바꿔서 지운다고하면 문제가 커질 것 같아 여쭙습니다.

홈페이지 내부에서는 다행히 해결하여 잘 작동하는데 외부주소로 삭제는 불가할지 여쭙습니다.

감사합니다!

이 질문에 댓글 쓰기 :

답변 2

1.

foreach ($f_idx_arr as $f_idx) {
    $result = $db->Execute($stmt, array($f_idx));
}

> $f_idx_arr 변수의 값이 Array나 Object일 때, 그 크기만큼 반복합니다.

Array나 Object가 아니면 실행이 될까요?

 

2.

http://www.foodmall2020.com/check_proc.php?f_idx=1234&SqlType=food_delete
이런식 단일값을 집어서 삭제를 못하는지 궁금합니다.

> check_proc.php에서 어떻게 처리하느냐에 따라 삭제 여부가 달라집니다.
삭제할 수도 있고, 삭제하지 못할 수도 있지요. 아래에 추가.

 

3.

혹시 누가 상품을 외부에서 f_idx값을 바꿔서 지운다고하면 문제가 커질 것 같아 여쭙습니다.

홈페이지 내부에서는 다행히 해결하여 잘 작동하는데 외부주소로 삭제는 불가할지 여쭙습니다.

URL을 통해 f_idx, SqlType 값 2가지만을 이용해 정상적으로 레코드를 삭제할 수 있다면

그 값을 변경해 얼마든지 지울 수 있겠죠?
무작위 대입으로 인한 삭제를 막으려면

  - 관리자 여부 체크

  - 해당 레코드의 작성자 여부 체크

  - 접속 경로 체크(조작이 가능한 정보이긴 하지만)

  - 기타 등등(예로 하나 적어보자면 일회성 작업[사전에 밑준비가 필요하긴 하지만])

이런저런 추자적인 조건을 넣어 처리를 해주면 됩니다.
구현 나름이지요.

BiHon님 답변 감사드립니다!
작성자 여부체크 등 몇가지 조건을 넣어줘서 보안을 강화하면 되는군요!
== 조건식으로 바로 적용해봐야겠습니다.

꼼꼼한 설명 정말 감사드립니다!
향후 작업에도 많은 도움이 될 것 같습니다.
즐거운 하루 되세요^^

오타가 있었군요.
"이런저런 추가적인 조건을 넣어 처리를 해주면 됩니다." 로 정정합니다.

누락된 예 하나 추가합니다.
삭제 URL 접속 시, 관리자가 아닌 경우 "비밀번호" 입력 > 삭제 프로세스도 있습니다.

만약 걱정이되시면 로직을 조금 개선해보세요

 


foreach ($f_idx_arr as $f_idx) {
    $result = $db->Execute($stmt, array($f_idx));
}

 

이렇게 된 문장을

 

if (is_array($f_idx_arr)) {

    foreach($f_idx_arr as $_idx) {

        $result = $db->Execute($stmt, array($_idx));

    }

}

 

와 같이 하셔도 되고

이외에도 다양한 보강방법은 있습니다만

 

가장 간단하게 배열일때 해당 변수를 별도 분해를 하는건 안전한 방법입니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
filter #php ×
전체 15,012
© SIRSOFT
현재 페이지 제일 처음으로