【发布时间】:2013-10-07 18:51:10
【问题描述】:
我之前只使用无线电输入设置了表单,因此该值只有一个或另一个。客户现在希望它成为一个复选框,以便您可以一次搜索多个变量。
我设置了一个测试 jQuery 方法,以确保它至少可以使用以下内容提交正确的字符串:
function showValues() {
var datastr = $(".formC").find("input[type='checkbox']").serialize();
$( "#bodyA" ).text( datastr );
}
$(".localSearch").on('click', showValues);
结果如下:
expertise%5B%5D=Ancillary&expertise%5B%5D=LargeGroup&expertise%5B%5D=IndividualPlans
我对 AJAX、jQuery 和 PHP 非常陌生,但这似乎是要提交的正确字符串。
现在我正在使用 jQuery AJAX 将值提交到我的 PHP 页面。
$('.localSearch').on('click', function() { //Pulls data based on radial input
var dataStr = $(".formC").find("input[type='checkbox']").serialize();
$.ajax({
type: "POST",
datatype: "html",
data: {
expertise: dataStr
},
url: "expertise.php",
success: function (data) {
$("#bodyA").html(data);
}
});
});
这是表单的样子:(表单包含更多,但这些是expertience.php的唯一元素)
<label for="agent">Agent Services:</label><br />
<label for="ancillary"><input type="checkbox" value="Ancillary" name="expertise[]" id="ancillary" />Ancillary</label><br />
<label for="smallgroup"><input type="checkbox" value="SmallGroup" name="expertise[]" id="smallgroup" />Small Group</label><br />
<label for="largegroup"><input type="checkbox" value="LargeGroup" name="expertise[]" id="largegroup" />Large Group</label><br />
<label for="medicare"><input type="checkbox" value="Medicare" name="expertise[]" id="medicare" />Medicare</label><br />
<label for="longterm"><input type="checkbox" value="LongTermCare" name="expertise[]" id="longterm" />Long Term Care</label><br />
<label for="individual"><input type="checkbox" value="IndividualPlans" name="expertise[]" id="individual" />Individual Plan</label><br />
<label for="tpa"><input type="checkbox" value="TPASelfInsured" name="expertise[]" id="tpa" />TPA Self Insured</label><br />
<label for="ppaca"><input type="checkbox" value="CertifiedForPPACA" name="expertise[]" id="ppaca" />Certified for PPACA</label><br />
<label for="acaind"><input type="checkbox" value="ACA_Ind" name="expertise[]" id="acaind" />Individual Marketplace Certified</label><br />
<label for="acashop"><input type="checkbox" value="ACA_Shop" name="expertise[]" id="acashop" />Shop Marketplace Certified <br />(small group)</label><br />
<span class="localSearch">Submit</span>
当它只处理一个值但它创建的字符串似乎是正确的字符串时,我让它工作。对此有什么想法吗?如果您需要更多代码或任何内容,请告诉我!
【问题讨论】:
-
恭喜您赢得了对您的实时页面的免费 sql 注入。我向 eris 祈祷那不是你的实时页面。如果是,请删除此脚本,否则有人会清理您的数据库。您应该对参数使用 perpared 语句 和
bindParam。否则不如mysql_query('DROP DATABASE') -
好吧,如果您不介意,那么有人会如何将 sql 语句注入到复选框中?就像我说的那样,我是新手,我试图阻止我自己学到的东西。不过,似乎没有人回答这个问题,我理解用户何时可以输入内容但他们不在这里。
-
认为用户不会注入一些代码是非常幼稚的。您的基本问题是您只是将代码放入语句中。我只能通过插件记录请求,修改添加注入并将新注入发送到您的脚本。如果请求提交,一切都是明文。您的脚本从外部获取的所有内容(例如 userrequest)都应该被视为恶意输入并被过滤/转义/随便
-
我对此并不天真,我非常了解 sql 注入的威胁。对于 php,我遇到的问题是缺乏对它的教育或扎实的介绍。我试图了解如何使用
bindParam,但这对我来说没有任何意义。这是我尝试了解它的地方php.net/manual/en/mysqli-stmt.bind-param.php -
删除代码无济于事,因为有修订历史。修复将是允许的专业知识领域的白名单。如果您通过字符串操作添加正确的数字占位符,则可以使用
bindParam。但我只是认为这两种方式都不是最好的。也许使用另一个数据库设计会更好,并且不会将所有专业知识都作为数据库中的标志。但我认为这很远,并不能解决你最初的问题;)
标签: php jquery ajax forms checkbox