2016-01-29 210 views
0

我有一個登錄頁面,它向Python腳本發送請求以對用戶進行身份驗證。如果未通過身份驗證,則會將您重定向到登錄頁面。如果它將您重定向到HTML表單。問題是您可以通過編寫URL來訪問HTML表單。我怎樣才能確保用戶來自我的Python腳本的登錄表單而不使用模塊,因爲我無法在我的服務器中安裝任何東西。我希望它嚴格使用Python我無法使用PHP。可能嗎?我可以使用其他方法來完成任務嗎?如何防止用戶直接訪問我的html頁面

+2

您的後端是用Python編寫的嗎?它如何提供文件?因爲如果你可以攔截服務,你可以檢查用戶是否被認證(很多很多方法),然後執行重定向。 –

+0

這是一個基本的安全問題。 無論您使用什麼框架生成頁面,都必須在返回每個受保護頁面之前檢查用戶是否已登錄(通過安全令牌)。這要求整個會話進行加密(HTTPS)以避免有人捕獲請求並重播它們。 不幸的是,解釋如何做到這一點對於StackOverflow答案來說太廣泛了。在網絡上研究「會話管理」。 –

+0

我在Linux服務器上運行我的Python腳本,它檢查用戶是否在數據庫中。目前我有它,如果它被認證,它打印的HTML表單,我希望它重定向你,而不是隻打印整個表格 –

回答

1

很明顯,你只是想使用Python,沒有框架等......所以問題是你實際上是重定向到一個現有的Web頁面。不要這樣做,而是用Python本身提供HTML。

# pages.py 
class DefaultPage(object): 
    def __init__(self): 
     self.html = ''' 
     All Your HTML Here 
     ''' 
    def self.display: 
     return self.html 

顯然你使用的東西,以滿足您的Python,我假設一些簡單的像谷歌應用程序引擎啓動,在這種情況下,你可以隨便寫的類。即使你使用其他一些簡單的WSGI,這個概念仍然是一樣的。

# main.py 
import webapp2 
from pages import DefaultPage 
class MainHandler(webapp2.RequestHandler): 
    def get(self): 
     page = DefaultPage() 
     self.response.write(page.display()) 

app = webapp2.WSGIApplication([ 
    ('/', MainHandler) 
], debug=True) 
-2

請確保在Python中檢查「referer」標頭,並驗證地址是您的登錄頁面。

+1

這可以很容易僞造。 –

+0

有人知道他們在做什麼,當然。 –

+0

默默無聞的安全性並不安全。如果它可以僞造並且目標有任何價值,那麼它將被僞造。 –

0

處理用戶登錄的最佳方法是將令牌用作cookie。
用戶成功登錄後生成一個令牌並將其發送給他們,將此令牌保存到「內存」數據庫(如果您使用的是類似django服務器的服務器) - https://docs.djangoproject.com/en/1.9/intro/tutorial01/,它會爲您提供。
每次用戶訪問您網站中的任何內部頁面時,請檢查已作爲Cookie標頭髮送的用戶令牌,如果在您的數據庫中找到,則將其指向請求的頁面,否則,請將其指向登錄頁面。
如果您提供有關服務器的更多詳細信息(服務器類型),我可以爲您提供更多幫助

+0

我在Linux服務器上運行我的Python腳本,它檢查用戶是否在數據庫中。目前我有它,如果它被認證它打印的HTML表單,我希望它重定向你,而不是隻是打印整個表單。 –

+0

你有控制用戶重定向嗎?如果他不是數據庫,那麼如何將用戶重定向到登錄頁面呢? –

+0

我正在使用JavaScript將您重定向到登錄頁面,以防萬一驗證失敗。 –

0

您剛剛要求的內容稱爲會話管理。這裏是關於它的OWASP指南:https://www.owasp.org/index.php/Session_Management

你可以使用像Django這樣的框架,它已經提供了這個安全層。 https://docs.djangoproject.com/en/1.9/topics/http/sessions/

+0

只有鏈接的答案是非常不鼓勵的。 –

+1

我明白了,但不是有效的嗎? –

+2

鏈接隨着時間的推移變壞。對SO的回答預計對未來用戶有用,因此它們應該是獨立的。 –