2011-02-26 93 views
1

本週我們的服務器上出現了一個非常奇怪的問題,其中一個aspx腳本中的方法(沒有代碼隱藏文件)以某種方式從其他地方的完全不相關的頁面調用我們的網站。基本上,劇本這樣說:在其他腳本中使用ASPX頁面的公共方法

<script language="c#" runat="server"> 
    public void Page_Load(object sender, EventArgs e) 
    { 
     // some initializer logic 
     PageMethod("data"); 
    } 
    public string PageMethod (string strInput) 
    { 
     // More logic 
    } 
    </script> 

我們經營的四臺服務器一個農場,我們看到了PageMethod過得去的所有服務器上的幾個地方腳本調用,所以當我的第一反應是,這是一個已損壞緩存在服務器上(我仍然懷疑它可能),我的直覺告訴我,我們允許這發生在我們的代碼中。我們一直在使用這種代碼風格的yonks,但最近升級我們的服務器到.NET 2.0。

我的第一個問題是,如果在某個網站的其他地方的腳本中可以訪問aspx中的每個public方法?我的第二個問題是,如果我們在aspx頁面上使用privateprotected方法(我總是認爲獨立頁面中的代碼是自包含的,所以草率的訪問修飾符應該沒有區別)。

(注:我不寫太多C#,所以我的語言的把握是非常簡單,只是理論上的,我只是想成爲一個真正的問題之前解決此問題)

+0

您能否提供有關您所看到/看到的內容的更多信息,從而促使您認爲這些方法是來自不相關網頁的呼叫?你在哪裏「看到」PageMethod被稱爲?在你的日誌中?這種情況下完整的網址是什麼? – 2011-02-26 09:23:32

+0

是否有其他頁面有一個名爲「Page_Method」的方法?不知道你如何確定(或者認爲)其他請求正在調用這個特定頁面的方法,這很難說。 – 2011-02-26 09:43:42

+0

@Shiv庫馬爾,我們的服務器捕獲所有未處理的異常的堆棧跟蹤,所以我可以看到腳本崩潰的Page_Load,緊跟在Page_Load之後,我看到了對PageMethod的調用。但是這兩頁之間絕對沒有聯繫。它幾乎看起來像是一個緩衝區溢出問題。 – Andrew 2011-02-26 11:13:52

回答

1

我的第一個問題是,如果一個aspx中的公共方法每個都可以訪問網站上其他地方的腳本?

爲了調用公共實例方法,需要該類的一個實例。我懷疑你的問題與其他直接調用此方法的腳本無關。有更多的HTTP請求被髮送到相應的ASPX頁面,ASPX頁面會調用該方法。這個請求可以由客戶端(頁面上的某個鏈接,...)或者直接由服務器完成(使用HttpWebRequest)。要進一步調試問題,請嘗試查看Web服務器日誌文件以查看對此頁面所做的所有請求。

我的第二個問題是,我們應該使用在aspx頁面私人或受保護的方法(我總在一個獨立的頁面的代碼是自包含的,所以馬虎訪問修飾符不應該有所作爲) 。

如果這些方法不打算被代碼的其他部分使用,那麼將它們設置爲私有或受保護並且不僅與ASP.NET相關是一種很好的做法。

+0

謝謝Darin。我也對@Shiv進行了評論,但是我在堆棧跟蹤中看到的是在另一個無關的腳本上調用Page_Load,緊接着該腳本的公共方法調用。我沒有收到堆棧跟蹤中返回的行號,所以我不能100%確定我看到的Page_Load實際上屬於用戶正在調用的腳本,但我看不到任何理由它會被誤導。這兩個腳本之間絕對沒有聯繫。 – Andrew 2011-02-26 11:19:47

1

這可能是最好的做法像PageMethod私人或受保護。我相信Page_Load和其他頁面生命週期方法必須是公開的,但其他頁面生命週期方法不會。 asp.net生成的類可以像其他任何類一樣訪問,儘管有時候它們很難找到。在那裏我通常會看到奇怪的地方就是有人抄襲了一個aspx頁面,卻忽略了改變頁面指令,這樣你就可以在前面看到多個代碼,指向一個代碼隱藏。

相關問題