Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 哈斯凯尔:有没有可能注入表演和阅读?_Haskell - Fatal编程技术网

Haskell 哈斯凯尔:有没有可能注入表演和阅读?

Haskell 哈斯凯尔:有没有可能注入表演和阅读?,haskell,Haskell,我读了这封邮件,其中讨论了类型转换的方法 在第一种方法中,String被用作通用表示,每个想要转换为其他类型或从其他类型转换为其他类型的类型都只是使自己成为typeclassesShow和Read的实例 然而,这会引起安全问题吗?是否有一种类似于SQL注入的方式让输入劫持进程?假设攻击者只能为这些值提供文本表示,而对于SQL注入,您的意思是通过解析输入执行任意代码:否 假设您可以控制Show和Read的实例,并且小心地保持代码的纯洁性,那么无论攻击者提供了什么输入,您的代码都是纯洁的,并且没有副

我读了这封邮件,其中讨论了类型转换的方法

在第一种方法中,
String
被用作通用表示,每个想要转换为其他类型或从其他类型转换为其他类型的类型都只是使自己成为typeclasses
Show
Read
的实例


然而,这会引起安全问题吗?是否有一种类似于SQL注入的方式让输入劫持进程?

假设攻击者只能为这些值提供文本表示,而对于SQL注入,您的意思是通过解析输入执行任意代码:

假设您可以控制
Show
Read
的实例,并且小心地保持代码的纯洁性,那么无论攻击者提供了什么输入,您的代码都是纯洁的,并且没有副作用,因此不可能出现“SQL注入”之类的情况


显然,攻击者可能会提供需要大量时间/资源才能解析的输入,但这是一种DoS攻击,这与类似SQL注入的攻击不同。

假设攻击者只能提供这些值的文本表示,而对于SQL注入,您的意思是通过解析输入执行任意代码:

假设您可以控制
Show
Read
的实例,并且小心地保持代码的纯洁性,那么无论攻击者提供了什么输入,您的代码都是纯洁的,并且没有副作用,因此不可能出现“SQL注入”之类的情况


显然,攻击者可能会提供需要大量时间/资源才能解析的输入,但这是一种DoS攻击,与SQL注入式攻击不同。

在我看来,当它不安全时,它是以一种明显的方式进行的。所以基本上:不要相信任何人的输入。它是用于反序列化的,所以当您进行反序列化时,请创建一个函数来检查您接收的数据的完整性

否则,用户可以轻松地更改输入(
show
生成非常简单的文本),并绕过智能构造函数。另一种处理方法是创建自定义的、更安全的实例。例如,许多容器序列化为:
fromList[1,2,3]
而不是
show
ing底层结构。不会有太多问题的

以下是数据类型的GHCi会话,该数据类型是一个列表,其大小为
Int

data LList a = LList [a] Int deriving (Eq, Ord, Show, Read)
let mkLList xs = LList xs (length xs)
-- Module would only expose (LList, mkLList)
read "LList [6,4,2] 6548" :: LList Int
> LList [6,4,2] 6548

现在我们有一个长度为6548个元素的
LList
。。。但我们头上只有3个。

当它不安全时,它是以一种明显的方式存在的。所以基本上:不要相信任何人的输入。它是用于反序列化的,所以当您进行反序列化时,请创建一个函数来检查您接收的数据的完整性

否则,用户可以轻松地更改输入(
show
生成非常简单的文本),并绕过智能构造函数。另一种处理方法是创建自定义的、更安全的实例。例如,许多容器序列化为:
fromList[1,2,3]
而不是
show
ing底层结构。不会有太多问题的

以下是数据类型的GHCi会话,该数据类型是一个列表,其大小为
Int

data LList a = LList [a] Int deriving (Eq, Ord, Show, Read)
let mkLList xs = LList xs (length xs)
-- Module would only expose (LList, mkLList)
read "LList [6,4,2] 6548" :: LList Int
> LList [6,4,2] 6548

现在我们有一个长度为6548个元素的
LList
。。。但是我们只有3个。

在SQL注入中,您劫持服务器来执行不允许的命令,因为您确实使用了未经检查的用户输入,所以如果您使用未经检查的用户输入,您当然会遇到同样的问题。。。我只是不知道这里的联系在哪里,这在很大程度上取决于您解析的数据能够表示什么样的恶意行为。SQL非常强大,您当然可以创建一个与之相当的Haskell DSL。因此,只要不执行SQL$read ArricryString,您就安全了。在SQL注入中,您劫持服务器来执行不允许的命令,因为您确实使用了未经检查的用户输入,所以如果您使用未经检查的用户输入,您当然会遇到同样的问题。。。我只是不知道这里的联系在哪里,这在很大程度上取决于您解析的数据能够表示什么样的恶意行为。SQL非常强大,您当然可以创建一个与之相当的Haskell DSL。因此,只要不执行SQL$read ArbitrayString,您就安全了。这只是由于自动派生的实例。您可以轻松编写安全版本的
Show
Read
,以检查
长度的正确性。此外,这并不是真正的SQL注入;这只会创建格式错误的数据,但不会执行任何操作。@Bakuriu我同意,这就是我在第一句中所说的“显而易见的方式”。不要天真地对待它。除此之外,您可能会发现或可能不会发现与SQL注入的相似之处,但这两种方式都可能导致安全问题。即使你只考虑执行:依赖于数据的执行是这个问题发生的子集,而且我认为这是非常频繁的。这仅仅是由于自动导出的实例。您可以轻松编写安全版本的
Show
Read
,以检查
长度的正确性。此外,这并不是真正的SQL注入;这只会创建格式错误的数据,但不会执行任何操作。@Bakuriu我同意,这就是我在第一句中所说的“显而易见的方式”。不要天真地对待它。除此之外,您可能会发现或可能不会发现与SQL注入的相似之处,但这两种方式都可能导致安全问题。即使你只考虑执行:依赖于数据的执行是这个问题发生的子集,而且我认为它也是非常频繁的。