场景:我有一个插入.php文件,可以从我创建的PHP表单中插入到申请人表格中:(列:firstname
,lastname
和class
)。但是,在php文件中有第三列硬编码:class
。
mysql_query("INSERT INTO applicant(firstname, lastname, class)
VALUES ('$_POST[firstname]','$_POST[lastname]','Computer');
有时我可能想要更改计算机的值。有没有办法让我无需打开PHP文件就可以更改它?例如,我可以通过在HTML表单中输入值来更改它吗?
答案 0 :(得分:1)
这是非常糟糕的做法。这为SQL注入和跨站点脚本攻击开辟了道路。要回答你的问题,是的。你可以用你提供的东西做到这一点,并利用你做错的事情来发挥你的优势。
这是你拥有的:
mysql_query("INSERT INTO applicant(firstname, lastname, class) VALUES ('$_POST[firstname]','$_POST[lastname]','Computer');
这是我能做的
在$ _POST ['firstname']的文本框中,'; INSERT INTO applicant(firstname, lastname, class) VALUES('$NEWVALUE', '$newValue', '$newValue'); SHOW TABLES; DROP TABLE applicant; --
答案 1 :(得分:0)
您可以使用带有“提交”按钮和文本框的页面。让它将值存储在XML文档中,然后让代码打开XML文档以检索值。当然,这是假设您想要半永久性地存储值。
答案 2 :(得分:0)
冒着走得太快的风险,我会扩展你不想使用EG的课:这个课说:
mysql_query("INSERT INTO applicant(firstname, lastname, class) VALUES ('$_POST[firstname]','$_POST[lastname]','Computer');
可以extended
为新班级的第3个值为parameter
或preset value
的班级。
另外,我会将未扩展的类改为看起来像这样以避免INJECTION攻击
mysql_query("INSERT INTO applicant(firstname, lastname, class) VALUES ('".mysql_real_escape_string($_POST[firstname])."','".mysql_real_escape_string($_POST[lastname])."','Computer');
答案 3 :(得分:0)
如果您修复了上述漏洞,则可以在插入之间切换。在PHP代码上创建一个条件,并检查该条件。
if ($_POST['use_sql'] == 1) {
// executeSQL1;
} else {
// executeSQL2;
}
答案 4 :(得分:0)
此页面上的其他解决方案都是巧妙的黑客攻击,但我将成为一个破坏者并说:不会。如果没有编辑PHP文件,您无法以任何远程安全或稳定的方式解决此问题。编写PHP文件的人采用了他们不应该采用的快捷方式,现在你有了一个不能以合理的方式扩展的脚本。
如果您可以访问PHP文件,您只需要更改:
'computer'
到
'$_POST[class]'
然后,如果输入表单中有一个名为“class”的字段,则其值将进入类列。
如果问题是您可以编辑服务器上的文件,但由于某种原因您无法编辑特定的 PHP文件,您可以随时创建一个具有相同内容的新PHP文件,进行所需的更改,并将输入表单定向到那里(只需将表单的ACTION属性更改为指向新的PHP文件而不是旧文件)。