2013-04-27 55 views
0

两个相关的问题应该很简单,尽管我的搜索已经空了。PHP提交的分号码

1)我有一个来自PHP的。如果一个字段中包含分号,并且在操作页面中执行$ _POST转储,则字段值将在分号处截断。我猜这与SQL注入安全有关?但需要允许合法的分号。有没有一个设置可以让它通过?或者我需要逃避它,如果是的话,怎么样? 2)为了捕获实际的SQL注入,我不需要在一个查询中允许多个语句...就像“SELECT * FROM table; DROP table”。有没有一种设置可以禁用此功能,无论是PHP还是MySQL,但不停止合法分号?

谢谢。

+1

我从来没有听说过分号是一个问题。你能举一个你正在输入的例子吗? – 2013-04-27 02:59:32

+0

另外,您不需要检测SQL注入,您需要使所有输入都是良性的。 – 2013-04-27 03:00:23

+0

我还没有针对问题1的答案,但对于2,您可以做的是使用准备好的语句。 – 2013-04-27 03:00:31

回答

1

分号不会引起任何问题。

使用准备好的语句。

mysqli

$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?'); 
$stmt->bind_param('s', $name); 

$stmt->execute(); 

$result = $stmt->get_result(); 
while ($row = $result->fetch_assoc()) { 
    // do something with $row 
} 

PDO

$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name'); 

$stmt->execute(array(':name' => $name)); 

foreach ($stmt as $row) { 
    // do something with $row 
} 

使用mysql_real_escape_string

$unsafe_variable = $_POST["user-input"]; 
$safe_variable = mysql_real_escape_string($unsafe_variable); 

mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')"); 

检查这个问题,以了解更多信息How can I prevent SQL injection in PHP?

0

好吧,傻我。是的,我正在使用准备好的语句,转义等等。但我还想在输入之前对输入进行清理。所以我有一个全局函数来检查所有参数,除去撇号和分号后的所有内容。对GET值工作正常,但我忘记了我需要更新以不同的方式处理POST参数,并忘记了这是在那里,因为直到现在我还没有输入分号。 :)但谢谢你的回应。