首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哈斯克尔:可以注射显示和阅读吗?

哈斯克尔:可以注射显示和阅读吗?
EN

Stack Overflow用户
提问于 2015-11-01 12:14:17
回答 2查看 135关注 0票数 1

我阅读了这个邮件胁迫:四种方法比较,其中讨论了类型转换的方法。

在第一种方法中,String被用作通用的表示形式,每一种想要转换到或从其他类型转换的类型都只会使自己成为类型类型ShowRead的实例。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-01 12:26:21

假设攻击者只能为这些值提供文本表示,而对于representation,则意味着在解析输入时执行任意代码:,no,

假设您控制了ShowRead的实例,并且非常小心地保持代码的纯正性,那么不管攻击者提供了什么输入,代码都是纯的,没有副作用,因此不可能像"SQL注入“这样的东西。

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

票数 3
EN

Stack Overflow用户

发布于 2015-11-01 12:26:29

在我头上,当它不安全的时候,它是一个明显的方式。因此,基本上:不要相信read从任何人那里得到的任何输入。它是用于反序列化的,所以当您进行反序列化时,创建一个函数来检查您接收的数据是否正常。

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

下面是一个数据类型的GHCi会话,该数据类型是一个具有Int大小的列表:

代码语言:javascript
复制
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 .但我们只有三个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33462015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档