2011-02-13 53 views
0

什麼是最好的方式告訴我的服務器端腳本,提交的表單或數據來自信任的來源或從我的網站? 上午服務器端的數據已經進行了很多審查,並認爲我可以在這個多與客戶方太網站黑客預防/最小化

AM一個PHP/MySQL的開發商

+0

可能重複的[PHP表單令牌](http://stackoverflow.com/questions/2034281/php-form-tokens) – bzlm 2011-02-13 19:34:05

+0

夥計我的問題是「在服務器接收到的惡意天氣數據來自有效來源」而不是「檢查數據的正確形式」 – Smith 2011-02-14 09:13:44

回答

0

夥計們,感謝您的幫助,我欣賞這一切。通常我在談論客戶端安全性,即確保來自客戶端的數據來自原始來源。

一般SSL可能只是已經得到了答案,經過大量的瀏覽,我發現兩個網站,解決了這個問題,在一定程度上:aSSLJquery implementation

這樣,我的數據被固定到一個層面說90 %

你覺得呢?

1

要找出誰發佈的數據使用的用戶的IP改善:

$ip = $_SERVER['REMOTE_ADDR']; 
echo "<b>IP Address= $ip</b>"; 

根據IP,您可以決定用戶是否信任。 (例如,如果你想只信任的IP地址的特殊範圍)

每當我讀張貼變量是在PHP我用這樣的過濾它們:

function check_string($string) {  
    // allowed chars: a-z,A-Z,0-9,-,_  
    if((preg_match('/^[a-zA-Z0-9\-\_]+$/',$string))) 
    return true; 
    return false; 
} 

它會過濾所有字符這不是az,AZ,0-9, - 或_並且增強了網站的安全性。如果你已經訪問到Web服務器:

  • 禁用服務器橫幅(其中顯示操作系統和Apache的版本爲例),如果你有機會到Web服務器的配置。這些信息可能對黑客非常有用,並且您希望禁用可能以任何方式幫助他們的所有內容;)

  • 阻止目錄列表(例如使用.htaccess文件)。一個簡單的例子是:

    選項所有-Indexes

  • 與一個受限用戶帳戶運行網絡服務器(最好是執行chroot用戶也一樣)在MySQL查詢

1

使用mysql_real_escape_string並在html文章中使用htmlentities。

例子:

錯誤:

<?php 
if($_SERVER['REQUEST_METHOD'] == "post"){ 
    echo $_POST['hai']; 
} 
?> 

權:

<?php 
if($_SERVER['REQUEST_METHOD'] == "post"){ 
    echo htmlentities($_POST['hai']); 
} 
?> 

$ _ POST還可以通過$ _GET


錯誤:

<?php 
$query = "SELECT * FROM table WHERE msg = '". $_GET['hai'] ."'"; 
?> 

權:

<?php 
$query = "SELECT * FROM table WHERE msg = '". mysql_real_escape_string($_GET['hai']) ."'"; 
?> 

而且不要忘記,當你得到的東西出來的MySQL表的使用ヶ輛...

問候

+0

這似乎沒有解決「提交的表單或數據是來自可信來源還是來自我的網站」的問題。專業提示,但。 – bzlm 2011-02-13 19:59:20

0

我一直使用的處理這些問題的類,它將處理服務器/客戶端,並確保任何輸入都來自服務器本身。它會驗證並確保它沒有被賦予特殊字符。

http://validformbuilder.org/

讓我知道是否有幫助,但前一陣子幫助了我。 :)

0

我認爲最好的選擇是添加一個數字簽名的請求,即使是一個簡單的。

例如,您的站點或受信任的源添加計算它的請求的SHA校驗和後,添加一個祕密「鹽」(不發送)。服務器獲取數據,添加相同的鹽並計算SHA簽名,如果SHA匹配,則源知道該祕密並且您可以信任該內容。

0

我想你的問題意味着CSRF ...只需生成並添加驗證令牌。

許多框架可以爲你管理這些。