2013-06-11 22 views
1

今晚在這個房屋周圍散散步。所有我想做的是在下面的腳本拉出CSRF令牌不過,如果我修改劇本,脫下它東西匹配「-token」的一部分,而不是返回nil無法匹配Lua中的csrf-token

local html = '<meta content="authenticity_token" name="csrf-param" /><meta content="ndcZ+Vp8MuM/hF6LizdrvJqgcRh22zF8w/DnIX0DvR0=" name="csrf-token" />' 

local csrf_token = string.match(html, 'content="(.*)" name="csrf-token"') 

當然是對的。

我知道這是連字符,因爲如果我將字符串修改爲「csrftoken」,並且它發現的匹配按預期工作。

我試圖逃跑的 - 像這樣\-但是,在這行的末尾拋出一個錯誤...

ELP ...

回答

2

有兩個問題:

  1. -確實需要逃過一劫,但Lua使用%而不是\

  2. 而且,這樣的事實:在.可以匹配任何東西,包括跨TA爲什麼你一個奇怪的現象的原因是由於gs(或屬性)並儘可能多地嘗試(因爲引擎將返回最左邊的可能匹配,不確定的量詞也無濟於事)。你應該做的是限制允許的字符,從而使拍攝的東西不能去屬性引號外面 - 就像[^"](除了引號的任何字符):

把所有的一起:

local csrf_token = string.match(html, 'content="([^"]*)" name="csrf%-token"') 

無論如何,you shouldn't actually be matching HTML with regular expressions

+0

啊哈!這是我需要的轉義率!我現在有另一個問題,那就是我使用正則表達式來匹配HTML,但是因爲這是一次拋棄loadimpact測試,所以我可以應付這個問題。 – johnwards

+0

@johnwards是的,可能...我也不知道在Lua中建立的DOM解析器... –

+0

你可以嘗試http://wscherphof.github.io/lua-htmlparser/ – catwell

0
name="csrf-token'" 

您有一個額外的撇號。

我也難逃「=和連字符,雖然這可能並不適用於所有這些字符是必要的

+0

雖然,我希望這是爲了一個合法的目的? –

+0

對不起,這是我的例子中的一個錯字。 – johnwards

+0

是啊我正在爲loadimpact.com的軌道應用程序進行負載測試:) – johnwards