2011-10-15 41 views
1

什麼是驗證數據的正確方法?我的意思是說你有一個插入功能:php驗證 - 在函數內部還是外部?

function newUser($name, $lastname, $age) { 

    // some validation process 

    $this->pdo->prepare("INSERT INTO user VALUES (?,?,?)", 
         array($name, $lastname, $age)); // this is another class 
                 // that runs execute in itself 

} 

所以基本上,問題是//some validation procecss部分是否應該在NEWUSER功能,還是應該在函數外面做什麼?我在問這個,因爲我正在寫一個請求類,我將在該類中存儲基本驗證規則,並自動篩選我的getpost值。所以如果我這樣做,並且如果我也在newUser中進行驗證(類似於其他函數),這意味着我將驗證相同的輸入兩次或者三次。

簡而言之,如果我假設傳遞給函數newUser的變量已經被驗證,那麼是否有什麼錯誤?在這種情況下,我還假設新用戶只從我的應用程序中調用(我不確定第三方是否也可以在未經我許可的情況下運行該功能,這實際上是我問這個問題的原因),因此變量已經過驗證在調用newUser函數之前。

P.S:對不起,如果問題以複雜的方式提出,只是評論,如果你不明白我的意思。

回答

2

如果我是你,我會做一個驗證類,它包含驗證類型(用於電子郵件,字符串,數字,字符串和數字)。

根據你希望函數中的變量是什麼,驗證它們並將它們放入數據庫中。

如果確保腳本安全,第三方不應該能夠運行您的功能。

例子,如何不腳本:

include($_GET['file']); 

基本上,我可以把一個自己的文件中使用文件參數在您的網址在系統中包括哪些內容?。也有疑問這是可能的:

mysql_query("INSERT INTO table (row) VALUES (". $_GET['value'] .")"); 

您應經常檢查,可以從你的腳本的外部訪問的參數,所以你的情況做一個新的用戶,您會收到驗證它在你的新的用戶功能你把它放在你的數據庫中。

+0

是的,這正是我的計劃。但是,「安全腳本」是什麼意思。你能給我看一個不安全腳本的例子嗎? – Shaokan

+0

那麼有一個叫做XXS的東西,是跨邊界腳本。它允許第三方人員將自己的腳本放入腳本中。我會在我的帖子中舉一個例子。 – Wesley

+0

啊,好的。我認爲我不知道的東西:)雖然驗證我,當然,也試試,以防止任何xss或sql注入攻擊:) – Shaokan

2

這取決於你的工作方式。例如,如果您使用的是MVC模式,則測試應在控制器中完成(不要使用您正在使用的功能)。 對於您的情況,您必須選擇是否必須使用驗證功能(或者可能是類的方法)驗證數據,然後使用您寫入的數據插入數據或讓此函數確保它們。我會建議你第一個解決方案,所以「插入」功能只能完成一項任務。

爲了提高我的答案,我建議您至少爲SQL注入和XSS(跨站點腳本)確保數據。

+0

因此,按照第一個建議,如果名稱爲空或不正確,我不需要在'newUser'裏面檢查內容。 – Shaokan

+1

@Shaokan No.因爲如果您是在軟件工程的好技巧之後編寫軟件,那麼每種方法/功能都應該只能完成一項任務。在這種情況下,一個方法/功能可以確保數據,另一個可以添加數據。 –

+0

謝謝奧雷利奧,很好的信息 – Shaokan

相關問題