所以我一直在檢查我能想到的所有事情,以確保我的輸入字段對於任何類型的SQL注入都是安全的。好消息是他們是安全的。壞消息是有一個標籤在一個它不應該觸及的地方搞亂了表單提交,我不能爲了我的生活找出原因。「SQL注入」問題阻止正確的表單提交 - PHP
這是所使用的精確HTML(這是在一個模板文件,所以原諒{$variables}
:
<div width="100%">
{$content}
{if $show_form != false}
<table class='Tfs_forum TFS_body ui-corner-all'>
<thead><tr><th class="TFS_header ui-corner-all">{$table_header}</th></tr></thead>
<tbody><tr><td class="TFS_userinfo loginlink ui-state-default ui-corner-all">
BBCode enabled. HTML will be parsed.<br><center>
<button type="button" onclick="addtoreply('[p]','[/p]')">Paragraph</button>
<button type="button" onclick="addtoreply('[b]','[/b]')"><b>Bold</b></button>
<button type="button" onclick="addtoreply('[i]','[/i]')"><i>Italic</i></button>
<button type="button" onclick="addtoreply('[u]','[/u]')"><u>Underline</u></button>
<button type="button" onclick="addtoreply('[s]','[/s]')"><s>Strikethrough</s></button>
<button type="button" onclick="addtoreply('[size=20px]','[/size]')">Font Size</button>
<button type="button" onclick="addtoreply('[color=red]','[/color]')">Font Color</button>
<button type="button" onclick="addtoreply('[center]','[/center]')">Center Text</button>
<button type="button" onclick="addtoreply('[url=]','[/url]')">Link</button>
<button type="button" onclick="addtoreply('[img]','[/img]')">Image</button>
<button type="button" onclick="addtoreply('[list]','[/list]')">List</button>
<button type="button" onclick="addtoreply('[*]','')">List item</button>
</center></td></tr>
<form method="post" action="{$submit_url}">
<tr><td>
<input type="hidden" name="forum" value="{$forum_id}"><div style="margin-left:10%;"><label>Topic title: <input type="text" name="new_post_title" value="{$title}"></label></div>
</td></tr>
<tr><td>
<label><div style="margin-left:10%; margin-right:10%;">Content:<textarea id="replybox" style="width: 100%; height: 150px;" name="new_post_content">{$formcontent}</textarea></label></div>
</td></tr>
<tr><td>
<div style="display: inline-block; float: right;"><button type="submit" name="new_post_submit"><span class="save"></span>Submit</button></div>
</td></tr></tbody>
</form></table>
{/if}
</div>
好吧,這是得到執行,直到它看到沒有公佈數據的整個PHP腳本(無論壇的田地,在發佈):
<?php
class TForumSystem_NewPost extends PHPDS_controller
{
public function execute()
{
include("BBCode.class.php");
include("includes.class.php");
$this->template->addCSSToHead(Allincludes::css());
$this->template->addJsToHead(Allincludes::js());
//Main variables here
$db_category = "***";
$db_forums = "****";
$db_posts = "****";
$db_replies= "****";
// $db_posts, $db_category, $db_forums, $db_replies;
//$forum_view_url = $this->navigation->buildURL('forum-view');
$view = $this->factory('views');
$maincontent = "";
$forum_link = ($this->navigation->buildURL('main-forum'));
if(!isset($_POST['forum'])) {
$this->template->info("Invalid forum, please navigate to the main <a href=\"$forum_link\">forum</a>");
$view->set('content', "Invalid forum, please navigate to the main <a href=\"$forum_link\">forum</a>"); $view->show();
}
問題是,當我使用的東西,如' or 1='1
或在標題字段' or 1=1--
,沒有數據被公佈,我目前使用的print_r($ _ POST),看看什麼是bein克提交,並沒有什麼是。
它可以完美地用於任何其他語句,但我也應該提到,這個腳本在我的本地機器上完美地工作,但是當使用我的主機時,我遇到了上述問題。
這是所有的輸入列表我測試了一下搞砸了:
' or 1='1
' or 1=1--
'" or 1=1--
' or 0=0 --
' or 'a'='a
實際的代碼會更有幫助,而不是描述它的作用。但是,請確保您僅發佈其中的一部分 - 您認爲導致問題的本質 – Nemoden
發佈代碼 –
我已編輯過您的帖子以進行代碼格式化和易讀性。儘管你的HTML並沒有太多的意義,所以我改變了它的邏輯。如果我所做的不對,請隨時再改變一次。 –