小编Dan*_*bio的帖子

这个SQL注入如何工作?需要说明

我正在学习RoR /数据库,这个话题让我特别困惑.在Agile Development with Rails 4一书中,他们举例说明了一个名为Dave的条目的所有订单列表:

pos = Order.where("name = 'Dave' and pay_type = 'po")
Run Code Online (Sandbox Code Playgroud)

这本书继续说你永远不想做这样的事情:

name = params[:name]
pos = Order.where("name = '#{name}'and pay_type = 'po'")
Run Code Online (Sandbox Code Playgroud)

相反,你应该这样做:

name = params[:name]
pos = Order.where(["name = ? and pay_type = 'po'",name])
Run Code Online (Sandbox Code Playgroud)

我明白,SQL注入是一个概念,但有一些细节让我感到困惑.对于初学者来说,SQL注入究竟是如何用作语法的.

我知道,如果你插入一个像第一个例子那样的外部表单参数,有人可以删除一个表/数据库但是如何?

让我们说你有这个:

name = params[:name] #DROP DATABASE database_name
pos = Order.where("name = '#{DROP DATABASE database_name}'and pay_type = 'po'")
Run Code Online (Sandbox Code Playgroud)

这是SQL注入的工作原理吗?SQL是一种语法,数据库中应该没有"name = DROP DATABASE database_name"的字段,这不会返回错误而不是丢弃数据库吗?

此外,问号版本将如何防止这种情况.再说一次,假设您有这种情况.

name = params[:name] #DROP DATABASE database_name
pos = Order.where(["name = ? and pay_type …
Run Code Online (Sandbox Code Playgroud)

ruby sql sql-injection ruby-on-rails

4
推荐指数
1
解决办法
622
查看次数

为什么flask sql alchemy 不更新记录的属性?

我有一个如下所示的类:

class Account(db.Model, flask_login.UserMixin):
    __tablename__ = 'account'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(75))
    username = db.Column(db.String(50))
    password = db.Column(db.String(250))
    admin = db.Column(db.Boolean)

    def __init__(self, email='', username='', password='', admin=None):
        self.email = email
        self.username = username
        self.password = password
        self.admin = admin

    def __repr__(self):
        return '<Account %r>' % self.username
Run Code Online (Sandbox Code Playgroud)

当我通过表单创建帐户时,admin 属性将为None. 但是,当我访问数据库并尝试手动将其设置为 时True,该属性会更新,但是当我再次访问数据库时,该属性非常None烦人。

这是我在控制台上执行的内容:

account = Account.query.get(1)
account.admin = True
db.session.commit()
db.admin ----> True

exit()

#restart again
account = Account.query.get(1)
account.admin ----> None
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python sqlalchemy flask flask-sqlalchemy

4
推荐指数
1
解决办法
4308
查看次数

Mac OS X使用Linux吗?

标题说明了一切.在我的工作中,我被要求在Virtualbox上安装Ubuntu Linux系统以及其他东西,以便我可以进入开发环境.这让我对操作系统感到疑惑.我知道Apple是Mac OS X,但我只是想知道Mac OS X是否使用Linux.8月份,我正在考虑在Edx.org上注册Linux课程,这样我就可以通过命令行获得更好的成绩.我想知道这是否是浪费时间.

我已经查阅了Linux的历史,在维基百科上查了一下,然后搜索了它,但令人惊讶的是我没有找到这个问题的答案.再一次,Mac会使用Linux吗?

linux macos

3
推荐指数
1
解决办法
5177
查看次数

有人可以告诉我在哪里可以找到 Flask-Admin 回调吗?

我正在尝试将 Flask-Admin 和某人编写的Flask S3 工具套件结合起来,将图像存储到 Amazon S3 简单存储中。我试图专门使用的工具是S3Saver功能,在文章链接中,用户继续说要合并此工具,我最好在 Flask-admin 回调上使用它。

但是,我在任何地方都找不到 Flask-Admin 回调列表。我已经完成了我的作业,并且已经逐字检查了这些回调Flask-Admin 文档的整个文档和源代码。

我发现flask_admin.contrib.sqla一些类似于回调的方法,但它不是我正在寻找的。我想它与 Railsbefore_actionafter_action. 有人可以指出我正确的方向吗?

顺便说一句,这是文章的实际引用

如果您也想在管理中处理删除文件的问题,您可以(例如)使用 s3-saver,并将其挂接到 Flask-Admin 事件回调之一

这些回调是什么?

python flask flask-admin

3
推荐指数
1
解决办法
959
查看次数

如何在递归方法中返回具有累积值的数组

我试图采取两个值times,number并返回一个number重复times次数的数组.这是一个例子:

replicate(3, 5) # => [5, 5, 5]
Run Code Online (Sandbox Code Playgroud)

这是我的尝试1:

@array = []

def replicate(times, number)
  return [] if times <= 0
  @array << number 
  replicate(times - 1, number)
  @array
end
Run Code Online (Sandbox Code Playgroud)

当我单独运行每个测试用例一次时,我会传递所有内容.但是,当我同时运行它们时,它会失败; @array包含每个测试用例的所有值,并且@array在整个测试套件的末尾看起来像这样:

@array # => [5, 5, 5, 1, 1, 1, 1, 2, 2]
Run Code Online (Sandbox Code Playgroud)

这是实现二:

def replicate(times, number)
  return [] if times <= 0
  array = []
  array << number 
  replicate(times - 1, number)
  array
end
Run Code Online (Sandbox Code Playgroud)

这将只返回一个值,因为递归将为每次运行创建一个本地副本.

如何返回一个使测试用例通过的数组?我不能使用全局变量或实例变量,也不能使用数组的本地副本.我之间可以使用什么东西吗?

ruby recursion

3
推荐指数
2
解决办法
630
查看次数

无法将文件从本地机器scp到vagrant

我正在尝试将文件从我的机器桌面scp到我的流浪盒中,但我似乎一直在遇到这个错误.

ssh: connect to host 127.0.0.1 port 22: Connection refused
lost connection
Run Code Online (Sandbox Code Playgroud)

我查看了我的流浪文件并找到了这一行:

 Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
 config.vm.network "forwarded_port", guest: 80, host: 8080
Run Code Online (Sandbox Code Playgroud)

我试过运行这些命令并分别得到以下错误:

scp -P 80 nginx.conf xxxxx@127.0.0.1:/etc/nginx/nginx.conf
ssh: connect to host 127.0.0.1 port 80: Connection refused
lost connection

scp -P 8080 nginx.conf xxxxx@127.0.0.1:/etc/nginx/nginx.conf
ssh_exchange_identification: …
Run Code Online (Sandbox Code Playgroud)

ubuntu vagrant

2
推荐指数
1
解决办法
6815
查看次数

如何使用 ruby​​ Base64 解码 utf8 字符

正如标题所描述的,我该怎么做?

\n
require 'base64'\n\ntext = '\xc3\xa9\xc3\xa9\xc3\xa9\xc3\xa9'\nencode = Base64.encode64(text)\nBase64.decode64(encode)\n\nResult: \xc3\xa9\xc3\xa9\xc3\xa9\xc3\xa9 instead of \\xC3\\xA9\\xC3\\xA9\n
Run Code Online (Sandbox Code Playgroud)\n

ruby ruby-on-rails

2
推荐指数
1
解决办法
2860
查看次数

PGSQL 错误所需的brew install 与bundle install 的说明。(如何让我的 PGSQL 工作)

我有一个 Rails 应用程序,我正在尝试对其进行测试。前一天我能够rake test:all成功运行,一切都井然有序。今天,当我运行时rake test:all,我收到此错误:

在此输入图像描述

我知道这个错误意味着什么,并且知道如何根据 pg_hba.conf 连接等解决这个错误。我已经做了一次又一次,没有任何问题。

然而,我发现真正的根本问题是我的 Postgresql 已升级到 9.4,但我的应用程序需要 9.3。运行brew info postgresql给出如下所示的输出:

在此输入图像描述

基本上,输出表明我需要升级到 9.4,并且 9.3 的特定配置不再更新(也如下所示)

在此输入图像描述

现在背景信息已经讲完了,这引出了我真正的问题。解决这个问题的“正确”方法是什么?

作为一个相对较新的 ruby​​/rails 开发人员和程序员,我总是有人协助安装我的环境,但从未真正深入了解系统安装层以及幕后发生的事情。我知道我不能也不应该再拖延了,所以在阅读了几篇与该主题相关的文章后,这就是我所遇到的。

自制程序揭秘

RVM揭秘

官方捆绑网站

如何在 Mac 上安装 Ruby

以及一些与该主题相关的堆栈溢出问题。

所有这些与我的 Postgresql 问题有什么区别?

例如,根据 Homebrew 的文章,通过运行brew info postgresql, I can deduce that someone installed postgresql onto my Mac and somehow now I have 9.4 instead of 9.3 (despite to my knowledge never typingbrew update或upgrade`)

那么这是否意味着 PGSQL 安装在我的 MAC 系统上?Gemfile 和 Gemfile.lock …

ruby postgresql ruby-on-rails

1
推荐指数
1
解决办法
1345
查看次数

为什么这段代码会填充每个数组?

我有这段代码创建了一个数组([[],[],[]])和一个迭代器,它试图用数字填充相应的数组(如下所示)

array = Array.new(3,[])
10.times do
  array[0] << 2
  array[1] << 3
  array[2] << 4
end
Run Code Online (Sandbox Code Playgroud)

当我执行此代码时,我希望看到这个

[[2,2,2,2,etc....],[3,3,3,3,etc...],[4,4,4,4,4...etc]]
Run Code Online (Sandbox Code Playgroud)

但相反,我得到了这个:

[[2,3,4,2,3,4,2,3,4....repeat],[2,3,4,2,3,4,2,3,4....repeat],[2,3,4,2,3,4,2,3,4....repeat]]
Run Code Online (Sandbox Code Playgroud)

我试图用byebug它来解决它,这对我来说毫无意义.这里发生了什么?

ruby

1
推荐指数
1
解决办法
50
查看次数

如何过滤两个日期之间的对象数组?

除了偶尔的 jQuery 选择器和元素修改之外,我不太擅长 javascript。对于我遇到的问题,我需要按日期过滤掉一个 javascript 对象。我有一个看起来像这样的结构:

Object { version: "3.1.1", released_on: "2016-08-21T00:00:00.000Z", high_vulns: 15, medium_vulns: 10, low_vulns: 5 }
Run Code Online (Sandbox Code Playgroud)

我想找到所有的对象从10岁之间,从而"2016-08-21T00:00:00.000Z""2010-08-21T00:00:00.000Z"我遇到的问题是,该released_on:领域是一个字符串不是日期。我是否需要创建一个new Date()对象将其转换为字符串,然后使用.filter或者我是否会做相反的事情,将字符串转换为日期然后过滤。有没有人尝试过这样的事情?

javascript jquery

1
推荐指数
1
解决办法
1万
查看次数