【发布时间】:2011-01-23 03:58:25
【问题描述】:
我正在做一个宠物项目。我有一个 php 类。在 HTML 中,我创建了该对象的实例。所以同一个页面可以包含很多实例。现在,我必须进行 ajax 调用。 ajax 调用基于对象的实例。在 ajax 调用中发送的数据可以包含数据库表的名称等。我想知道那有多安全。有什么想法吗?
【问题讨论】:
标签: php javascript ajax security oop
我正在做一个宠物项目。我有一个 php 类。在 HTML 中,我创建了该对象的实例。所以同一个页面可以包含很多实例。现在,我必须进行 ajax 调用。 ajax 调用基于对象的实例。在 ajax 调用中发送的数据可以包含数据库表的名称等。我想知道那有多安全。有什么想法吗?
【问题讨论】:
标签: php javascript ajax security oop
攻击者想知道:
您将免费赠送 2 号。
【讨论】:
最好调用一个函数,它知道要查询的数据库的字段,并将传递的值作为参数。
【讨论】:
好吧,考虑一下这种情况:
a) 您有一个 Javascript 函数,它执行 AJAX 调用以在您的服务器上执行查询,它类似于:
function doQuery(tablename, fieldname, whereclause) { ... }
b) 在服务器上,您使用该 AJAX 调用的传递参数动态构建查询:
$query = "SELECT $fieldname FROM $tablename WHERE $whereclause";
如何阻止恶意用户向您的 AJAX 函数注入调用
fieldname = '*'
tablename = 'mysql.user'
whereclause = '1=1'
你最终得到
SELECT * from mysql.user WHERE 1=1
然后您的整个 MySQL 用户名/密码集合就会愉快地出门了。
永远不要让用户提供的数据控制您的代码的功能,尤其是在与“外部”系统(例如数据库)交互时。
【讨论】: