更改PHP文件中的硬编码值

时间:2012-03-19 19:10:36

标签: php mysql html

场景:我有一个插入.php文件,可以从我创建的PHP表单中插入到申请人表格中:(列:firstnamelastnameclass)。但是,在php文件中有第三列硬编码:class

mysql_query("INSERT INTO applicant(firstname, lastname, class) VALUES ('$_POST[firstname]','$_POST[lastname]','Computer');

有时我可能想要更改计算机的值。有没有办法让我无需打开PHP文件就可以更改它?例如,我可以通过在HTML表单中输入值来更改它吗?

5 个答案:

答案 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个值为parameterpreset 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文件而不是旧文件)。