當(dāng)前位置:首頁 > IT技術(shù) > 編程語言 > 正文

pythonSSTI(0)
2022-04-29 13:56:58

這些寫的很好了,懶得自己寫了,就看吧

https://blog.csdn.net/weixin_41603028/article/details/107865253

https://www.cnblogs.com/hackxf/p/10480071.html

"模板"初步

PHP中很少有模板

在之前PHP的學(xué)習(xí)中,很少遇到模板的概念,因為PHP是一個腳本語言,可以寫在HTML里,對于html需要和后端交互的內(nèi)容直接處理。

比如這樣:

對于前端表單上傳的文件,底下的PHP腳本直接對其進(jìn)行處理(并可能進(jìn)行存儲)。

python模板(以flask為例)

但是python就不一樣了,它不能寫在html中。要通過python web制造交互效果,一般是通過模板框架)實現(xiàn)。python框架一般是一個庫,可以從前端表單中接收處理數(shù)據(jù),并且通過調(diào)用函數(shù)對前端進(jìn)行渲染。相應(yīng)的,在前端的html中,需要使用一些控制語句,功能語句來支持渲染。

像這樣:

有很多顯眼的控制語句;【{% xxxx %}】

這里面也有功能語句,img src里的{{ url_for('static',filename='img/cover.jpeg') }}" 這個就是。url_for是一個python_flask里的函數(shù);具體以后再講。

Python_flask初步

一個樣例

給出一個最基礎(chǔ)的、安全的flask小程序。

app.run()運行該web項目;參數(shù)可以填套接字;如果不填,默認(rèn)127.0.0.1:5000.

再次強調(diào),如果要出網(wǎng)(你有一個公網(wǎng)ip),記得不要填公網(wǎng)ip,而是填本地任意地址0.0.0.0 。

app是一個裝飾器;@app.route('xxx')后一定要跟一個函數(shù),它的作用是將函數(shù)內(nèi)容和參數(shù)url綁定。裝飾器 可以理解為 裝飾某個url對應(yīng)的網(wǎng)頁。它必須有返回值,必須為一個渲染的模板 或 字符串。

render_template系列函數(shù)負(fù)責(zé)具體的渲染。小程序中的render_template_string直接使用字符串template渲染網(wǎng)頁根目錄【/】,并且將用戶可控的參數(shù)在函數(shù)中傳入。如果我們不是把要渲染的東西寫在一個python字符串中,而是將其寫成了單獨的帶控制、功能語句的html,那么,我們就要使用render_template函數(shù)。像這樣:

return render_template('search.html', genres = genres)

獲取參數(shù)

python_flask提供三類參數(shù)獲取方法:

request.form,request.args,request.value

查閱資料時,許多內(nèi)容的經(jīng)常提到“表單”這個詞;但我覺得他們說得“表單”的定義非常模糊,此處反而不利于區(qū)分這些方法。

我先將他們與PHP中的全局變量對應(yīng)理解:

request.args.get('xxx')====>$_GET['xxx']

request.form.get('xxx')====>$_POST['xxx']

request.value.get('xxx')====>$_REQUEST['xxx']

SSTI漏洞

給出一個基礎(chǔ)的,不安全的flask小程序:

from flask import Flask,request,render_template_string

app=Flask(__name__)

@app.route('/',methods={"POST","GET"})
def hello_world():
    person='who?'
    if request.values.get("name"):
        person=request.values.get("name")
    template='<h1>Hi, %s</h1>' %person
    return render_template_string(template)

if __name__=='__main__':
    app.run()

用格式化字符串拼接參數(shù)的后果就是,用戶可以通過輸入{{}}進(jìn)行命令執(zhí)行。

本文摘自 :https://www.cnblogs.com/

開通會員,享受整站包年服務(wù)立即開通 >