有没有办法使用平坦的.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
他似乎想发送短信,我只能在商业环境中想象。感谢您的更新,只是为了确保:) –