2014-05-04 28 views
0

我有一個表單域,我們允許用戶上傳YouTube網址(顯然有噸YouTube的URL類型變種)消毒表單字段

我的問題是,我們該如何清理這個元素,以防止用戶來自張貼:

  1. 非youtube網址。
  2. 繁重的漏洞攻擊包含無關的代碼和url。

我看到這篇文章here

但我有些迷惑不解如何實現由傑夫·阿特伍德給出了答案。

我現在的表單元素很簡單。

<div class="form-group col-lg-6 col-sm-12 underline"> 
<label>Add a Video from <strong>YouTube</strong></label> 
<input type="text" name="video" id="choosevideo" class="form-control" tabindex="6" placeholder="YouTube Video URL"> 
</div> 
+2

在PHP中,您可以使用'FILTER_VALIDATE_URL'或'SANITIZE_'的'filter_var()',但需要額外的正則表達式/字符串檢查來斷言它指向youtube無論如何。 – mario

+0

Thankyou Mario,不知道爲什麼我的帖子被拒絕,如果我可以添加更多的問題,我會。關於你的回覆將會有一個searchypoos。謝謝,投了票 – 422

+0

你有沒有看到這個http://stackoverflow.com/questions/13476060/validating-youtube-url-using-regex,甚至這個http://stackoverflow.com/questions/1383073/how-do-我檢查,如果一個視頻存在你使用PHP的? – Pevara

回答

3

您不應該依賴客戶端驗證,因爲它很容易跳過。始終在應用程序的服務器端進行驗證。

找到一個合適的regex並將其添加到您的服務驗證。如果你想要客戶端驗證,你可以添加「模式」屬性到你的輸入標籤。

+0

感謝Botteknotten,會有一個偵察員,看看我能想出什麼。 – 422

+1

「始終在您的應用程序的服務器端進行驗證」。或者兩者兼而有之,因此您可以對其進行覆蓋,並區分最初黑客從表單中提交意外/無意錯誤的人。 – JakeGould

0

因此,您可以按照表單所示獲取$_POST['video']中的用戶數據。

您應該從PHP的parse_url()函數開始,然後使用parse_str()函數。

一個適合您的工作示例。自定義您的需求:

<?php 

$parse = parse_url($_POST['video']); 

if ($parse['host'] != 'www.youtube.com'){ 
    echo 'this is not a valid url'; 
    // return false here or something 
} 

// continue only if false was not returned, of course 

parse_str($parse['query'], $query); 

if (!isset($query['v']) || !$query['v']){ 
    echo 'you have not provided a video id'; 
    // return false here 
} 

// if false was not returned up until this point, 
// you have the video ID in $query['v'] 
// and that is all you need I believe 

// I think you can do the rest 

?> 

這是我認爲最好的做法,我不明白爲什麼人們暗示正則表達式或類似。這種方法快速,安全,並使用內置的PHP函數,可以很好地執行操作。

您可能需要根據您的需求略微調整它,具體取決於您的用戶可能輸入的URL(例如,我不知道YouTube是否有更多域/虛擬主機 - 這可以通過創建array()和檢查它與in_array()等)