2013-05-04 58 views
1

我有一個網站,允許用戶A搜索和查看其他用戶。 當用戶A點擊說用戶B.我將用戶B的ID作爲GET變量傳遞。然後我在視圖中使用該ID來顯示適當的數據。這是好的做法嗎?我應該公開一個用戶ID嗎?安全地在PHP中傳遞數據

而且,當用戶A在用戶B的簡檔上時,他可以向用戶A發送消息。如何將用戶B的ID安全地傳遞給我的控制器?

任何幫助非常感謝。

+1

用戶ID通常顯示在大多數網站上,即。 stackoverflow,但如果你真的想隱藏它,嘗試mod_rewrite,並將他們的名字重寫爲他們的用戶ID。 – 2013-05-04 02:51:34

+0

你可以使用身份證,這是沒有害處的。你可以使用Cookie或會話傳遞用戶B的ID .. – SolidSnake 2013-05-04 02:52:40

回答

0

有多種方法可以做到這一點。

我通常用於這種用例的一種方式是創建一個足夠僞隨機的唯一散列標識符,以便當它通過url傳遞時,用戶將無法隨意更改某些值在其中並獲得另一個用戶的配置文件。

E.g.假設你通過ID,URL將如下所示:

showProfile.php?id=1256 

將1256更改爲1257可能會顯示下一個用戶。

假如你傳遞一個散列字符串,它是足夠隨機的:

showProfile.php?id=u4n5l4534mnk43nl34n 

而這樣的哈希值不按順序,這樣就可以不爲了得到下一個改變字符/數字。

這也取決於你想如何安全,以使網站

+0

謝謝,我正在考慮哈希。 – user1543871 2013-05-04 03:25:37

0

所以成員之間的用戶數據共享,我在想,當用戶B的個人資料用戶A點擊,鏈接變得像site.com/profile.php?id=24嗯? 24是用戶B的個人資料。如果是這樣的話,那就沒有問題了。在某個時候,當您搜索用戶的個人資料時,您將回顯數據庫中的某些內容,無論是身份證,用戶名還是姓。所以,id是好的,但是如果你需要專業性,你甚至可以使用用戶名,用htaccess的一點點幫助,它可能看起來好像site.com/profile/john

所以,總之你沒辦法回聲每個配置文件都有一些東西,這個數據庫還沒有。

看你的標籤,你已經如果你正在使用的個人資料頁上,這樣的事情提到mysql

$user = $_GET['id']; 
$query = mysql_query("SELECT * FROM USER WHERE id = '$user' "); 

嗯......這是危險並留下您的網站/數據庫OPEN進行攻擊。 因此,如果您使用的是類似於上面的內容,則應該使用PDO

+0

感謝您的回覆。我正在使用PDO。我的數據庫中唯一唯一的字段是用戶的電子郵件和身份證。那麼,我認爲ID是我最好的選擇? – user1543871 2013-05-04 03:04:15

+0

是的,我想id是你的選擇。但是,在大多數網站中,用戶的名字也是獨一無二的,你應該也可以這樣做。這取決於你的選擇。 – 2013-05-04 03:10:36

+0

好的,謝謝,我根本不使用用戶名。 – user1543871 2013-05-04 03:15:31