簡體   English   中英

在將數據發送到mySQL之前,如何清理用戶的數據?

[英]How do I sanitize data from users before sending it to mySQL?

我現在正在建立一個論壇。

我想在將輸入數據發送到MySQL數據庫之前清理我的輸入數據(即用戶的帖子)。

我已經在搜索一些函數來做到這一點,但是我不確定我是否已經使用了足夠多的函數並且它們是否足夠安全。 歡迎任何建議。

這是我的代碼:

$message=$_POST['answer'];
$message=nl2br($message); //adds breaks to my text
$message=stripslashes($message); //removes backslahes (needed for links and images)
$message=strip_tags($message, '<p><a><b><i><strong><em><code><sub><sup><img>'); //people can only use tags inside 2nd param
$message = mysql_real_escape_string($message); //removes mysql statements i think (not sure)

編輯:請告訴我是否應該在strip_tags函數中添加一些標簽。 也許我已經忘記了一些。

嘗試使用PDO。 它具有很好的綁定功能,真正提高了安全性。 以下是一些示例: http//php.net/manual/pl/pdostatement.bindvalue.php

PDO默認情況下是PHP5,所以現在幾乎無處不在。

如果您想允許在論壇中使用有限的HTML(正如您使用strip_tags()所示),請使用HTMLPurifier ; 否則你很容易在這些標簽的屬性中使用javascript。

順便說一下,你現在正在剝離你添加的<br>標簽

保存到DB時:

$message=strip_tags($message, '<p><a><b><i><strong><em><code><sub><sup><img>'); //people can only use tags inside 2nd param
$message = mysql_real_escape_string($message); //removes mysql statements i think (not sure)

輸出時:

$message=nl2br($message); //adds breaks to my text
$message=stripslashes($message); //removes backslahes (needed for links and images)

此外,在寫入html輸入元素(如texttextarea時,請使用htmlspecialchars

OBS:不要重新發明輪子。 學習一些像codeigniter這樣的PHP框架,它提供了非常安全的數據管理方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM