2017-10-15 1 views
-1

J'ai écrit une simple application de publication qui se connectait à une base de données nommée forum. Mon code est donné ci-dessous.Comment puis-je utiliser la bibliothèque de blanchiment python pour éviter l'injection de script?

# "Database code" for the DB Forum. 

import datetime, psycopg2, bleach 


POSTS = [("This is the first post.", datetime.datetime.now())] 

def add_post(message): 
    ''' This function insert post into the database ''' 
    db = psycopg2.connect(dbname = 'forum') 
    c = db.cursor() 
    c.execute("insert into posts values (%s)", (message,)) 
    db.commit() 
    db.close() 

def get_posts(): 
    '''Take the posts from the databse ''' 
    db = psycopg2.connect(dbname = 'forum') 
    c = db.cursor() 
    c.execute("select content, time from posts order by time") 
    result = c.fetchall() 
    POSTS.extend(result) 
    db.close() 
    return reversed(POSTS) 

Je souhaite utiliser la bibliothèque de blanchiment dans ce code. Mais je ne sais pas comment. J'importe déjà la librairie de blanchiment. Merci d'avance.

+0

On ne sait pas ce que vous demandez. Si votre question est "comment utiliser la librairie Bleach", elle est probablement trop large et non spécifique pour [SO] dans sa forme actuelle. Jetez un coup d'œil sur [ask] et [help/on-topic] – pvg

+0

Bleach est pertinent dans la couche de sortie, et ni l'une ni l'autre de vos méthodes ici ne génère rien. – MatsLindh

Répondre

0

Vous devez ajouter la ligne suivante dans votre méthode de add_post:

text = bleach.clean(str(message)) 

Et puis régler la exécuter la fonction en conséquence:

c.execute("insert into posts values (%s)", (text,)) 

Ainsi, la méthode add_post complet ressemble à ceci:

def add_post(message): 
    ''' This function insert post into the database ''' 
    db = psycopg2.connect(dbname = 'forum') 
    c = db.cursor() 
    text = bleach.clean(str(message)) 
    c.execute("insert into posts values (%s)", (text,)) 
    db.commit() 
    db.close()