【发布时间】:2013-11-29 11:54:31
【问题描述】:
“routes.rb”中的部分代码,
...
post '/csr' do
text = PkiSupport::display_csr('/etc/pki/subordinate_ca.csr')
erb :download_csr, :locals => { :csr => text }
end
在“PkiSupport.rb”中
...
def display_csr(csr_file)
text = `more #{csr_file}`
return text
end
在“download_csr.erb”中
...
<form id="csr-form" action="<%= url "/subordinate_ca/csr" %>" method="post">
<h4>csr</h4>
<textarea cols="80" rows="36" name="csr">
<%= csr %>
</textarea>
</form>
思路很简单,当用户选择“/csr”时,shell命令“more ...”会被执行,输出字符串会显示在表单的textarea中。
它确实显示正确,但包含额外的前置字符串(如下),它是“-----BEGIN...”之前的任何内容。那么如何预防呢?
::::::::::::::
/etc/pki/subordinate_ca.csr
::::::::::::::
-----BEGIN CERTIFICATE REQUEST-----
MIIFATCCAukCAQAwaDETMBEGCgmSJomT8ixkARkWA2NvbTETMBEGCgmSJomT8ixk
ARkWA3h5ejEQMA4GA1UECgwHWFlaIEluYzESMBAGA1UECwwJTWFya2V0aW5nMRYw
FAYDVQQDDA0xMC4xMC4xMzAuMTU4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEAruWYRn7mjZkHeD+PPLpMSBRoYnLKNvYMte9XneFDh1TItLolYhM4bmWX
gewKOO9+kNY21CoVu1jYZ3q9WitgJlS3tMHPhc6IjuY9DfQ58aeJaZHO8+ISE3Op
l6xNcaxOeHXMlVgdeX4ouyzB2ykJVhu1KtE+XTKilUu6nIrH6ETHrxelBs36Hu1q
...
谢谢。
【问题讨论】:
-
你认为字符串的哪一部分是多余的?
-
可能不相关,但是......您使用
more #{file}的任何具体原因?cat #{file}不是更好吗?更好的是,File.read(file)?另外 - 为什么不尝试记录您的字符串以查看它们在将它们转储到网页之前是什么,以查看它们在每个步骤中的确切内容?
标签: ruby-on-rails ruby sinatra