2012-02-18 3 views
1

사용자로부터 정보를 수집하여 유효성을 검사하고 이후에 DB에 삽입하는 스크립트가 있습니다. PHP 코드 삽입 코드

내가 항상 "반드시 htmlspecialchars"와 "addslashes"를 실행 형태의 각 필드에있는 모든 불쾌한 문제를 방지합니다.

오늘은 내 오류 로그에 보면 다음과 같은 오류 발견 :

Unknown: open(/tmp/sess_574af1197644f6c4019d664d71ea5f9e, O_RDWR) failed: Permission denied (13) 

이 오류는 양식을 처리하는 파일에 생성 중입니다. 외관상으로는, 누군가는 나의 신청으로 "거칠게 자른"것을 시도한다. 내가 고민하는 것은 이것을 막는 방법이다. 다행히도 내 서버 액세스 수준이 올바른 방식으로 설정되었지만 그렇지 않은 경우 문제가 발생합니다.

방법/I는 프런트 엔드에 아닌 서버 액세스 레벨에서 해킹의 이러한 종류를 캡처하는 내 양식 유효성 검사에 변경하려면 어떻게해야합니까?

<?php 
session_start(); 
include ($_SERVER['DOCUMENT_ROOT'].'/inc/config.inc.php'); 

if ($_POST[leverancier]) { $lid = CheckNumericGet($_POST[leverancier]); } 

// Afhandelen van de submit 
// 
if ($_POST[a] == 'ervaring') { 
$naam = CheckStringGet($_POST[naam]); 
$ervaring = CheckStringGet($_POST[ervaring]); 
$email = CheckStringGet($_POST[email]); 
$twitter_naam = CheckStringGet($_POST[twitter_naam]); 

// Als er een @ in twitternaam zit weghalen 
// 
if (substr($twitter_naam, 0,1) == '@') { 
    $twitter_naam = substr($twitter_naam, 1); 
} 

include ($_SERVER['DOCUMENT_ROOT'].'/inc/functies_mail.inc.php'); 
$cont = "yes"; 

if ($naam == '' | $ervaring == '' | $email == '' | $rating_foto == '' | $rating_service == '' | $besteld == 0) { 
    $cont = "no"; 
    $msg[][1] = "Helaas, niet alle verplichte velden zijn ingevuld. Probeer het nogmaals."; 
} 

if (!CheckEmail($email)) { 
    $cont = "no"; 
    $msg[][1] = "Het ingevulde email adres is niet correct"; 
} 

#Als alle velden ingevuld zijn 
if ($cont == 'yes') { 
    $server = gethostbyaddr($_SERVER['REMOTE_ADDR']); 

    // Ervaring in database plaatsen 
    // 
    $query = "INSERT INTO 
". $tabel_ervaring ." (lid, naam, email, foto_score, service_score, ervaring, datum, foto, canvas, album, actief, twitter_naam, lev_akkoord) 
     VALUES 
      ($lid, '$naam', '$email', $rating_foto, $rating_service, '$ervaring', '$datum', '$foto', '$canvas', '$album', '0', '$twitter_naam', '$akkoord')"; 
    $result = mysql_query($query) or die(mysql_fout($query, $PHP_SELF)); 

    $ervaring_id = mysql_insert_id(); 

    $message = ""; 
    $subject = "Ervaring Fotovergelijk.nl: "; 
    mail("[email protected]", "$subject", $message, htmlemailheaders($email)); 
} 
$_SESSION[message] = $msg; 

}

+5

오류를 기반으로 해킹 시도가 아니라 세션에 저장된 데이터에 액세스하는 동안 오류가 발생한 것처럼 보입니다. 양식의 코드를 제공해야합니다. 그렇지 않으면 확실하게 말할 수 없습니다. –

+1

$ _POST [leverancier]는 $ _POST [ 'leverancier']이어야합니다. 그렇지 않으면 PHP는 레버 런셔를 상수로 해석하려고합니다. 다른 $ _POST 변수도 동일합니다. –

답변

3

는 PHP 인해 (공유는 서로 다른 사용자 + 세션 충돌을 실행하는 여러 사이트와 호스팅) 권한 오류로 세션 파일을 열지 못했습니다 많은 것 같은데. 해킹 시도가 아닌 것처럼 보입니다. 합니다 (manual page에 명시된)

그러나 보안에 민감한 상황에서 addslashes을 사용할 수 없습니다. Prepared statements (PDO 또는 mysqli 사용 ...)를 사용하는지 확인하십시오. 대신 바인드 된 매개 변수를 사용하여 Zend에서 mysql 확장을 사용하지 않는 것이 좋습니다.

+0

+1 당신의 추가는 소름 끼치는 소리. – Gumbo

2

To avoid any nasty problems on each of the form fields I run always an "htmlspecialchars" and "addslashes".

이것은 가장 재미있는 부분입니다. "나는 항상 불쾌한 문제를 피하기 위해 콘돔과 안전 벨트를 사용하고 있습니다."
아니요 "addslashes"또는 "htmlspecialchars"는 일반용 안전 루틴처럼 사용하면 좋을 수 있습니다. 둘 다 특별한 용도로 사용해야합니다.

Apparently, somebody try to 'hack' into my application.

유일하게 말할 수있는 것은 서버가 잘못 구성되었다는 것입니다. 이 영구적 인 문제가 아니라 임의의 하나가 아닌 경우,이 문제는 더 복잡 할 (더 깊은 조사를 필요로한다.) 할 수

what do I need to change on my form validation

다소 재미있는 질문이다 그. 우리는 양식 검증을 모릅니다. 그래서 우리는 무엇을 바꾸어야하는지 분명하게 알 수 없습니다.