有沒有辦法使用平坦的.rb文件來接受POST請求,還是我需要使用像Rails或Sinatra這樣的框架來接受請求?Ruby是否需要接受POST請求的框架?
我在思考如何使用flat .php文件來接受POST請求,並使用$_REQUEST[]
變量來訪問傳遞的數據。
更具體地說,我試圖從PHP中移植一個Twilio應用程序來學習一點Ruby。該應用程序接受短信,處理髮送的消息,並根據收到的消息正文發送回覆。
在使用PHP時,我可以將Twilio站點中的SMS請求URL設置爲我的PHP文件。 PHP文件使用$_REQUEST[]
數組來使用收到的消息。 (這似乎是紅寶石相當於這是params[]
。)
這裏就是我談論的PHP version的一個簡單的例子:
<?php
require "twilio.php"; // Twilio Library
$ApiVersion = "2010-04-01"; // Twilio API Version
$AccountSid = "SID"; // Twilio SID
$AuthToken = "TOKEN"; // Twilio Token
// Instantiate a new Twilio Rest Client
$client = new TwilioRestClient($AccountSid, $AuthToken);
// Get message body & who it's from, for the SMS that was just received
$SMSbody = mysql_real_escape_string($_REQUEST['Body']);
if ($SMScode == "codeword"){
$SMSresponse = "You know the code.";
}
else{
$SMSresponse = "You do not know the code.";
}
// Twilio response to the sender
header("content-type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
?>
<Response>
<Sms><?php echo $SMSresponse;?></Sms>
</Response>
這是我嘗試在Ruby equivalent,這可能是進攻壞:
require "rubygems"
require "twilio-ruby"
@account_sid = "SID"
@auth_token = "TOKEN"
smsbody = params['body']
@client = Twilio::REST::Client.new(@account_sid, @auth_token)
@account = @client.accounts.get(@account_sid)
if smsbody == "codeword"
smsreply = "You know the code"
else
smsreply = "You do not know the code"
response = Twilio::TwiML::Response.new do |r|
r.Sms smsreply
end
# print the result
puts response.text
這導致了Twilio調試儀表盤,說明得到的答覆是超過160個字符。這是因爲回覆是完整的Ruby代碼,而不是由於代碼爲而運行。這使我認爲POST請求沒有被正確接受......
如果魔術引號被禁用,您的代碼包含一個非常好的命令注入漏洞。海報可能首先要清理輸入(通過將'''轉義爲'\'') –
你是絕對正確的,而且它是最危險的......我會更新答案。然而,這只是一個概念證明,希望OP不會在生產中使用這些代碼。 – Fabio
他似乎想發送短信,我只能在商業環境中想象。感謝您的更新,只是爲了確保:) –