我的方案看起来像这样,我在屏幕上显示数据库分页网格。 我想添加一个按钮来下载CSV电子表格。 所以我编写了这样的代码:
$(function(){
var file_complete = false;
var final_sql = $('.initiate_download').val();
var orderby = $('#search_submit').data('orderby');
var $posturl = $url + "index.php/Spawner/launch_spawner";
$('#downloadModal').modal('hide');
$('.initiate_download').on("click", function(e) {
e.preventDefault();
$('#pleaseWait').html($html);
setTimeout(function() {
$.ajax({ // initiate download
url: $posturl,
type: "POST",
data: {
final_sql: final_sql,
orderby: orderby,
report: $report
},
success: function(data) {
var download_id = data;
// console.log(download_id);
check_download_status(download_id);
}
})
}, 2000);
})
});

<div class="row top-buffer">
<button id="search_submit" class="btn btn-primary initiate_download" type="submit" value="<?php echo $sql; ?>" data-orderby="<?php echo $orderby;?>" name="final_sql_lic" >Download List</button>
<span id="pleaseWait"> </span>
</div>
&#13;
它工作正常,但问题是你可以用视图页面选项查看SQL,有没有办法解决它?
答案 0 :(得分:2)
大多数人所做的是他们没有在页面上嵌入SQL,而是公开处理幕后SQL内容的URL。
在您的示例中,您可以创建如下页面:
http://website.com/api/csv?select=col1,col2,col3&orderBy=someColumn&where=someCondition
然后你的php将获取这些参数并根据这些参数生成sql并运行查询。确保安全地处理输入以避免SQL注入(请参阅http://bobby-tables.com/php.html)。
当前场景的问题在于,查看源代码的人会明白地看到您将SQL直接传递到服务器,这意味着他们可以生成自己的SQL,如:DROP TABLE table1, table2;
或更糟。