为什么撇号出现在Ruby on Rails中,这是否是安全问题的标志?

时间:2013-08-29 01:25:31

标签: ruby-on-rails rails-activerecord form-helpers

我是Ruby on Rails的新手,我正在使用form_helper来创建和更新记录。在下面的表单中,我正在收集信息以保存用户可以创建的地图的数据。 :name字段是用户为地图指定的名称。它被保存到MySQL表中,变为varchar(255)字段。

如果我将地图命名为“John's Map”,它将同时显示在数据库和视图中

    John's Map 

如何防止这种情况发生,我的代码是否容易受到这种方法的SQL注入?

我见过一些与Python和PHP有关的回复,但我不确定Rails。我正在使用Virtualmin来创建表,所以任何让我在Virtualmin中解决问题的响应都会非常感激。谢谢!

从视图

    <% form_for @newsavedmap, :html=>{:id=>'createaMap'} do |f| %>
    <%= f.error_messages %>

    <% if params[:newsavedmap_id] %>
<%= f.text_field :name, {:id=>"savemap_name", :size=>30, :value=> @newsavedmap.name }%></p>
    <% else %>
<%= f.text_field :name, {:id=>"savemap_name", :size=>30, :value=>"New Map"}%></p>
    <% end %>

数据库表详情

    DROP TABLE IF EXISTS `newsavedmaps`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `newsavedmaps` (
    FIELDSAREALLLISTEDHERE
    `name` varchar(255) DEFAULT NULL,
    ) ENGINE=InnoDB AUTO_INCREMENT=159 DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;

数据库中的其他表显示撇号。例如,我有另一种形式,如下所示,当用户输入带撇号的名称时,撇号在表格中显示为撇号。

    <form id="createitem" action="/saveditems" method="post">
    <label for="saveditem_name">Item Title</label>
    <%= text_field :saveditem, :name %>

该表的结构:

    DROP TABLE IF EXISTS `saveditems`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `saveditems` (
    FIELDSAREALLLISTEDHERE
    `name` varchar(255) NOT NULL, 
    ) ENGINE=MyISAM AUTO_INCREMENT=8418 DEFAULT CHARSET=latin1;
    /*!40101 SET character_set_client = @saved_cs_client */;

修改1

我使用了ALTER TABLE newsavedmaps CONVERT TO CHARACTER SET latin1;我的newsavedmaps表现在看起来像这样:

    DROP TABLE IF EXISTS `newsavedmaps`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `newsavedmaps` (
    FIELDS ALL LISTED HERE
    ) ENGINE=InnoDB AUTO_INCREMENT=248 DEFAULT CHARSET=latin1;
    /*!40101 SET character_set_client = @saved_cs_client */;

撇号现在在数据库中正确显示,但它们仍然在视图中显示为奇怪的字符。有任何想法吗?这可能与此有关:https://github.com/rails/rails/issues/9108

0 个答案:

没有答案