我有一個方案。比方說,有人在我的網站,有它增加了一個事件,例如一個形式,有一個字段,如下所示:編輯HTML然後通過PHP發佈
<input type="text" name="title" id="title">
比方說,某人使用了F12的開發工具和改變ID =「標題」來id =「whatever」,甚至刪除id屬性,那麼我將如何讓我的PHP腳本停止運行,以便沒有任何內容發佈到MySQL?
下面是一個例子了書籤功能,我有:(前端形式)
<form action="bookmarks.php" method="post" enctype="multipart/form-data">
<div class="control-group">
<label class="control-label" for="input-mini">Title*</label>
<div class="controls">
<input class="span12" id="title" name="title" type="text" placeholder="e.g. Oliver's pet cat...">
</div>
</div><!-- /control-group -->
<div class="control-group">
<label class="control-label" for="input-mini">Link*</label>
<div class="controls">
<input class="span12" id="link" name="link" type="text" placeholder="e.g. http://boopeo.com">
<input type="hidden" name="parse_var" id="parse_var" value="addbookmark" />
<br /><input name="submit" type="submit" class="btn btn-success span12" value="Bookmark" /></form>
後端PHP:
if (isset($_POST['parse_var'])){
$parser = $_POST['parse_var'];
$parser = htmlspecialchars($parser);
if ($parser == "addbookmark"){
$title = $_POST['title'];
$title = htmlspecialchars($title);
$linkurl = $_POST['link'];
$linkurl = htmlspecialchars($linkurl);
$sqlrecentmark = $db->query("SELECT link_url FROM tablenamehere WHERE mem_id='$id' ORDER BY id DESC LIMIT 20");
while($row = $sqlrecentmark->fetch(PDO::FETCH_ASSOC)) {
$recent_link = $row["link_url"];
}
if ($linkurl != $recent_link){
$dataact = array('mem_id' => $id, 'title' => $title, 'link_url' => $linkurl);
$sqlactivity = $db->prepare("INSERT INTO tablenamehere (mem_id, title, link_url) value (:mem_id, :title, :link_url)");
$sqlactivity->execute($dataact);
} else {
$not_msg = '<br /><br /><div class="alert alert-error">Oops! You have added that bookmark before. Just look and you shall find!</div>';
}
}
}
從不信任用戶提交的數據,總是驗證和消毒...和Don忘記你必須使用參數化查詢 – 2013-07-19 22:07:49
你可以發佈你的前端形式和後端php代碼?這看起來更像是一個與後端輸入消毒有關的問題。不確定這種情況確實有害,但看起來很有趣。 – Maximus2012
我將在前面的表格中使用一個不同的示例: – James