2012-06-28 8 views
-2

나는 프로그래머로부터 사이트를 집어 들었고 거의 모든 시간에 그가 발견 한 기능 선언을 발견했습니다.객체 지향 PHP 함수 사용

그는 수업 및 전화 기능을 포함합니다. update_user_info($_POST); 다음 수업 시간에 자신이

... 
function update_user_info($obj) { 
    if (!empty($_POST["user_name"]) && !empty($_POST["user_email"])) (
     $sql = "UPDATE myusers SET user_name = {$_POST["user_name"]} WHERE user_id = {$_POST["user_email"]}"; 
     ... 
    ) 

} 
... 

처럼 그녀는 $obj 변수를 사용하지 무슨 재미.

나는 그에게 그것을 말하려고 노력하고 있지만 그가 그것을 사용하거나 직접 게시하면 나는 그 잘못을 알고 있지만 말로 표현할 수 없다고 말하는 것은 아무런 의미가 없다는 것을 말하고있다.

EDIT : 보안 관점에서 볼 때, 단지 변수가 기능에 전달되고 이후에는 한 번 사용하지 않아도됩니다. 예 : 함수에 게시 된 변수를 변경하기로 결정하면 함수가 닫히고 보편적 인 본질을 잃어 버리기 때문에 아무 것도 영향을 미치지 않습니다. 그가 사용하는 방식은 일반 코드와 같습니다. 아무 이유없이 다른 곳에두면 함수 효과라고하는 동일한 파일에서 동일한 작업을 수행 할 수 있습니다. 그는 마다 모든 단일 페이지에 대해 새로운 기능을 가지고 있으며 실제로 다른 페이지의 물마루 프로젝트에서 반복되는 것을 본 적이 없습니다.

+0

무엇을 원하십니까? 당신은'$ _POST'를 함수 인자로 전달하는 것에 대해 묻는가? 만약 그렇다면'$ _POST'를 의존성 삽입의 형태로 전달하는 것이 절대적으로 바람직하다고 말하고 싶습니다. –

+0

이런 종류의 문제가 http://programmers.stackexchange.com/에서 몇 번 언급되었습니다. – Orbling

+0

이 코드가있는 특정 쇠고기는 무엇입니까? '$ obj' 매개 변수가 사용되지 않았습니까? 그렇습니다. 그러면 불필요한 것입니다 ... 그 외에는 여기에있는 질문을 보거나 이해하지 못합니다. – deceze

답변

1

필터링하지 않고 $ _POST 사용자 입력을 받아들이면 SQL Injection을 열 수 있습니다.

$obj의 사용과 관련하여 코드를 자르므로 사용 방법이 명확하지 않습니다. 그러나 함수 내에서 실제로 사용 된 적이 없다면 거기에 사용할 이유가 없습니다. 그러나 괄호 안에 $obj을 사용하는 것과 같습니다. 이 상황에서는 함수에 대한 매개 변수이며 실제로 함수를 호출 할 때까지 실제로 선언되지 않습니다. 이 사용법에서는 결코 $obj을 선언하지 않고 함수 매개 변수로 사용하는 것이 좋습니다. 실제로, 그것은 바람직합니다.