【发布时间】:2013-07-19 22:05:30
【问题描述】:
我有一个场景。假设有人在我的网站上,并且有一个添加事件的表单,例如,有一个字段如下:
<input type="text" name="title" id="title">
假设某人使用 F12 开发人员工具并将 id="title" 更改为 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>';
}
}
}
【问题讨论】:
-
永远不要相信用户提交的数据,始终验证和清理......并且不要忘记您必须使用参数化查询
-
你能发布你的前端表单和后端php代码吗?这看起来更像是与后端输入清理有关的问题。不确定这种情况是否真的有害,但看起来很有趣。
-
我将在前面的表单中使用不同的示例:
-
我现在将在问题中发布示例
-
由于您在后端使用准备好的语句,因此您应该在 MySQL 安全部分上做得很好。对于其他安全措施,您可能需要验证和清理您的输入。看看 GUMP php 库。这在这里可能会有所帮助:github.com/Wixel/GUMP
标签: php html mysql security developer-tools