2012-01-20 4 views
1

I 'DBinterface'라는 클래스와 'user'라는 클래스가 있습니다.해킹되지 않도록 DB 클래스를 보호하는 가장 좋은 방법은 무엇입니까

  1. 연결 기능을 공개해도 괜찮습니까?

    class dbinterface { 
    
        private $_dbLink; 
    private $dbHost = 'host'; 
        private $dbUser = 'user'; 
        private $dbName = 'name'; 
        private $dbPass = 'pass'; 
        private $dbUserTable = 'table'; 
    
    public function connect() 
    { 
        $this->_dbLink = mysql_connect($this->_dbHost, $this->_dbUser, $this->_dbPass); 
        if(!$this->_dbLink) 
         throw new Exception ("Could not connect to database. " . mysql_error()); 
    } 
    
  2. 사용자 ID 및 암호와 같은 모든 사용자 정보를 저장하는 SQL 테이블이 있습니다. 쉽게 테이블을 해킹하는 사람의 위험 부담없이이 테이블의 이름을이 함수에 넣을 수 있습니까? 아니면 db 클래스를 사용해야합니까?

    function registerUser($userName, $userPassword) { 
    
        $db = new db(); 
        $db->connect(); 
    
        // Select database 
        mysql_select_db($this->dbName); 
    
        $query = "insert into usersExample values (NULL, \"$userName\", \"$userPassword\")"; 
        $result = mysql_query($query); 
    
        // Test to make sure query worked 
        if(!$result) die("Query didn't work. " . mysql_error()); 
    
        // Get the user ID 
        $this->userID = mysql_insert_id(); 
    
        // Close database connection 
        mysql_close($dbLink); 
    
    } // End registerUser() 
    

PS : 나는 암호 암호화를 제거하고 가독성을위한 문자열을 탈출했다.

+0

사용자는 임의로 public으로 표시된 함수를 호출 할 수 없으며 최종 사용자가 자신이 'registerUser' 자체를 호출하도록 허용하지 않는 한, 아무 것도 괜찮습니다. 입력 내용을 살균합니다 ... – Cyclone

+0

mysql 확장이 오래된 것입니다. 방법 비추천. 새 코드는 mysqli 또는 PDO를 사용해야하며, 둘 다 준비된 문에 대한 지원과 같은 중요한 이점이 있습니다. – outis

답변

1

삽입하기 전에 데이터를 이스케이프 처리하는 가장 좋은 방법은 무엇입니까?

mysql_real_escape_string()을 살펴 보았습니까?

일반적으로 웹 보안에 대해 묻고 있습니까? 아무도 어떻게 든 데이터베이스 정보를 공개하거나 직접 스크립트를 호출 할 수 없도록 만드는 것과 같이?

DB 자격 증명을 루트 아래에 중첩하여이 클래스에 포함시킬 수 있습니다. 당신이 다른 곳 IN_APP을 정의 할 분명히

<?php defined('IN_APP') or die('No access allowed.'); 

을 :

define('IN_APP', true); 
또한 모든 클래스 파일의 헤더에 이런 식으로 뭔가를 공통 파일의 다른 상수를 정의하고 포함하여 직접 파일을 호출 방지 할 수 있습니다

내가 의견을 말하면 자유롭게 의견을 놓친 경우 최선을 다해 조정할 것입니다.

+0

일반적으로 웹 보안에 대해 묻습니다. 나는 보았지만 그것을 사용하는 방법 이외의 "IN_APP"에 mucn 정보를 찾을 수 없습니다. 그것은 무엇입니까? 또는 그것을 설명 할 링크를 알고 있습니까? – user1082764

+1

IN_APP는 문자열입니다. 당신이 원하는대로 부를 수 있습니다. define ('LOL'); 그래서 oop 코드의 다른 부분 - 생성자 또는 다른 것 -이 정의가있는 db config를 포함합니다.그런 식으로 정의 된 ('LOL') 또는 죽는 ('액세스 없음') 경우 생성자가 먼저 호출되고 스크립트를 직접 호출하려고 시도하면 죽을 수 있습니다. 물론, htaccess도 한 줄에서이 작업을 수행 할 수 있습니다. 우리는이 두 가지를 사용하여 대부분의 프레임 워크가이 중복성을 기본값으로 사용하게 만듭니다. –

0

웹 서버에서 PHP 파일을 가져올 방법이 없는지 확인해야합니다. 즉, 실행되지만 반환되지는 않습니다. 비록 그 보증에도 불구하고, 나는 당신의 데이터베이스 패스워드를 PHP 파일 내에 두지 않을 것이다. 그 중 하나는 보안이다. 대신에, 나는 당신의 PHP 스크립트가 어떻게 (그리고 읽는) 방법을 알고있는 텍스트 파일에 연결 세부 사항 (모든 것뿐만 아니라 패스워드)을 배치 할 것이다. 그러나 텍스트 파일은 PHP와 같은 디렉토리에 있지 않다. 웹 서버가 GET/PORT 액세스를 제공 할 수있는 디렉토리조차도 제어하지 마십시오. 해당 컨트롤을 사용할 수없는 경우 적어도 직접 URL을 통해 텍스트 파일에 액세스하지 못하도록하는 .htaccess가 있어야합니다.

0

나는 그것에 대해 너무 걱정하지 않을 것입니다. 해커가 어쨌든 컴퓨터에서 코드를 실행하는 경우 클래스가 아닌 열려있는 SQL 처리기를 사용하려고합니다.

관련 문제