2009-09-25 44 views
0

我在方法調用,SQL查詢和文件調用中使用$_GET,$_POST$_COOKIE變量 - 並且有必要將此用戶數據轉義/重寫爲更好的安全性(避免注入攻擊等)。你會如何推薦這樣做?保護用戶數據 - 用於方法調用,SQL和文件調用

從內置逃生功能......讓流動的果汁一些想法:

  • 添加反斜槓:\x00, \n, \r, \, ', "\x1a使串安全的SQL查詢 - 在mysql_real_escape_string()。
  • 將接受的字符數限制爲[a-zA-Z0-9 _-\.](其中「\.」是轉義的「。」 - 點)。

您的輸入將被讚賞。謝謝。

回答

1

由於轉義依賴於您發送數據的系統,我的建議是使用PHP提供的功能,專門爲每個系統創建。

例如:

無論哪種方式:不要重新發明輪子!

有許多種輸出已經存在的轉義函數/方法:使用這些!

+0

確保您,USINT的mysql_ *功能上面,如果你正在使用MySQL是前連接到MySQL。 – 2009-09-25 05:02:11

+0

請勿在冒號,問號和感嘆號之前放置空格。這看起來很糟糕! – Gumbo 2009-09-25 08:23:14

+0

@Gumbo:對不起,我通常使用法語輸入法語,並且在法語中,我們在這些語言之前放置了一個空格...並且我沒有反射信息來輸入英語時刪除這些空格... – 2009-09-25 10:10:06

0

還要注意,有些事情你必須逃脫(如果用戶輸入)的圖像位置等

如果有人熱鏈接到圖像(例如化身)這

http://yoursite.com/admin/user/delete/1

,然後在您的視圖代碼

<img class="avatar" alt="<?php echo $userName; ?>" src="<?php $avatarUrl; ?>" /> 

然後,如果您以管理員身份登錄,則可能會意外刪除用戶。當然,希望這種刪除是通過一個帖子完成的,但它仍然可以繞過。

在這種情況下,htmlspecialchars()不會幫助。

您可以通過強制所有數據更改方法與帖子一起使攻擊者更難,並且通過爲每個刪除操作生成一個令牌並在刪除之前對其進行驗證幾乎不可能。

0

我使用的是這樣的:

function escape($sql) { 
    // Stripslashes 
    if (get_magic_quotes_gpc()) { 
     $sql = stripslashes($sql); 
    } 
    //if this is the intedger 
    if (!is_int($sql) || $sql == '0') { 
     $sql = "'" . mysql_real_escape_string($sql) . "'"; 
    } 
    return $sql; 
} 

而且在MySQL查詢

mysql_query("SELECT SQL_CACHE * FROM `page` WHERE `id` = ".escape($_GET['id'])." LIMIT 1"); 
+0

此函數僅適用於SQL查詢 - 不適用對於方法和文件調用 - 也是MySQL特有的。必須可以製作更通用的Escape功能。 – 2009-10-05 13:57:49

相關問題