2016-03-08 118 views
0

我正在使用Code Igniter中的工作庫進行人員添加,編輯和審閱文檔。文檔信息存儲在一個MySQL表有點像這樣:創建數據庫條目的安全錨點引用

CREATE TABLE `document` (
    `owner` varchar(15) NOT NULL, 
    `id` smallint(6) NOT NULL AUTO_INCREMENT, 
    `pdf` varchar(250) NOT NULL, 
    `title` varchar(250) NOT NULL, 
    `permission` tinyint(1) NOT NULL DEFAULT '1', 
    `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`,`pdf`), 
    ) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 

pdf字段是文件的名稱。結合id他們彌補了表的主鍵。

在應用程序的前端部分,用戶經常會看到並使用這些文檔的列表,我想將鏈接附加到它們。想象,這樣的鏈路可以這樣創建的:

<a href='some_controller/some_method?pdf=<?php echo $document->handle; ?>'>Link</a> 

凡假定$document對象的handle屬性是一個唯一的標識符,其方法some_method用於加載該用戶點擊該文檔。

什麼是最安全的數據庫字段?我認爲id字段,但其auto_increment似乎不安全,並允許人們擺弄HTML以獲取禁止的文檔。我應該添加一個隨機的數字或字符串哈希另一個唯一的列?

+0

服務的文件之前,先檢查用戶的權限。 – chris85

回答

1

你可以在這裏做很多事情。 關於你在表格上創建一個新列的建議以及保存文檔的哈希ID會增加一點點'安全性',所以隨機鍵入一個現有id的概率較低。

但我不認爲這是做到這一點的正確方法。我的建議是創建一個新表格,將每個用戶的可用文檔或與方法相關的表格與用戶相關聯,這取決於您的應用程序需求。 例如:

//documents_for_users 

document | user 
0803161 | 1 
0803162 | 1 

一旦這樣做了,你的方法調用,您可以檢查此關係表之間做文檔任何事情之前。

控制器

function some_method(){ 
    $id = $this->input->get('pdf'); 
    $user = $this->session->userdata('userid'); 
    if ($this->my_model->check_permission($id,$user) { 
     // do your stuff with document then 
    } 
} 

型號

function check_permission($id,$user){ 
    $this->db->select('*'); 
    $this->db->from('documents_for_users'); 
    $this->db->where('document', $id); 
    $this->db->where('user', $user); 
    $query = $this->db->get();  
    if ($query->num_rows() > 0){ 
      return true; 
    } 
    return false; 
} 

這樣您的安全是顯著上升

+0

'check_permission'方法似乎是我的選擇,我不需要創建一個新表格,因爲文檔並不總是必須侷限於其所有者。謝謝! –

+0

真的很高興幫助! – David