dlliang14 2024-04-21 09:35 采纳率: 75%
浏览 20

flask学习疑问-escape

目前在自学flask这块内容
但是没法复现官方文档里的现象。

img

 HTML转义
 返回HTML(Fask中的默认响应类型)时,必须对输出中呈现的任何用户提供的值进行转义,以防止注入攻击.使
 用稍后介绍的Jinja泸染的HTM模板将自动执行此操作.
 escape(),此处显示,可以手动使用.为了简洁起见,大多数示例中都省略了它,但您应该始终了解如何使用不受
 信任的数据.
 from     markupsafe importescape
 @app.route("/<name>")
 def hello(name    return fHello,fescape(name)!
 如果用户设法提交name<script>alert("bad")</script>,转义会导致其呈现为文本,而不是在用户的浏览器中运
 行脚本.
 <name>在路由中从URL捕获一个值并将其传递给视图函数.这些变量规则解释如下.
                                                                                               CSDN@dlliang14

url如果带有/skript,直接就会破坏url结构,导致识别不到这个url。
不管我后台有没有加escape进行转义。
我还问过gpt,解决方案有一个利用ajax,写个js脚本。但是在js脚本里encodeURIComponent(/skript)就会直接被解释成脚本结束,导致后面代码就变文本了。
如果改成encodeURIComponent(userInput)用户输入,就会又会出现破坏url结构,导致识别不到这个url的问题。

如何才能复现官方文档里的现象呢?想试试没有用escape才会出现的XSS漏洞攻击。

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-21 09:35
    关注

    引自免费微信小程序:皆我百晓生

    要复现官方文档中的HTML转义现象,并尝试XSS攻击,你需要创建一个简单的Flask应用,然后通过URL传入恶意脚本。这里是一个详细的步骤说明和代码示例。

    首先,确保已经安装了Flask和Markupsafe库。如果没有安装,可以使用以下命令安装:

    pip install flask markupsafe
    

    接下来,创建一个名为app.py的文件,然后添加以下代码:

    from flask import Flask, request
    from markupsafe import escape
    
    app = Flask(__name__)
    
    @app.route('/hello/<name>')
    def hello(name):
        # 在实际应用中,你应该检查用户输入是否可信,这里为了演示,我们直接使用
        # 用户提供的数据。在生产环境中,你应该使用合适的方法验证和清理用户输入。
        return f"Hello, {escape(name)}!"
    
    if __name__ == '__main__':
        app.run(debug=True)
    

    保存代码后,在终端运行python app.py启动Flask服务器。

    此时,你可以通过访问http://127.0.0.1:5000/hello/<your_name>来测试应用。例如,访问http://127.0.0.1:5000/hello/John会显示 "Hello, John!"。

    要尝试XSS攻击,你需要构造一个包含HTML标签的名称。例如,尝试以下URL:

    http://127.0.0.1:5000/hello/%3Cscript%3Ealert('XSS attack')%3C/script%3E
    

    在现代浏览器中,URL编码可能不会立即生效,因此你可能需要复制粘贴到地址栏,而不是直接点击。这将触发一个JavaScript弹窗,显示 "XSS attack",证明了转义的重要性。

    然而,由于浏览器的安全机制,上述例子可能不会立即显示弹窗。为了测试,你可以尝试创建一个本地HTML文件,比如test.html,并添加以下内容:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Test XSS Attack</title>
    </head>
    <body>
        <a href="http://127.0.0.1:5000/hello/%3Cscript%3Ealert('XSS attack')%3C/script%3E">Click me</a>
    </body>
    </html>
    

    打开这个HTML文件,点击链接,浏览器应该会显示 "XSS attack" 的警告,因为这次是在页面内部加载的,而不是直接在地址栏输入。

    这就是官方文档中提到的HTML转义现象以及XSS攻击的基本概念。在实际应用中,你应该始终对用户输入进行转义,以保护你的应用程序免受此类攻击。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 4月21日
  • 修改了问题 4月21日
  • 创建了问题 4月21日