1

当我们将带有 & 字符的字符串插入 mysql 时,该字符串只插入到遇到 & 字符。

示例:插入“一和二”时...仅插入“一”。

尝试了一些东西,例如... htmlentities 或 htmlspecialchars... 对我没有任何作用。

当前的 PHP 代码:

$sms = htmlentities($_POST["sms"]);


$query = "INSERT INTO sms (detail,catID,deviceID) VALUES ('".$sms."',".$_POST["catID"].",'".$_POST["deviceID"]."')";

由于应用程序是实时的......我需要通过仅在服务器上编辑 PHP 文件来解决它。(希望可以实现)

4

3 回答 3

2

这是一个安全(针对 SQL 注入)查询:

$query = sprintf("INSERT INTO sms (detail,catID,deviceID) VALUES ('%s', '%s', '%s')",
                 mysql_real_escape_string($_POST['sms']),
                 mysql_real_escape_string($_POST['catID']),
                 mysql_real_escape_string($_POST['deviceID']));

我将所有内容都作为字符串转义,因为我不知道您的表架构。

但是,如果catIDdeviceIDINTEGER类型,那么它应该是:

$query = sprintf("INSERT INTO sms (detail,catID,deviceID) VALUES ('%s', %d, %d)",
                 mysql_real_escape_string($_POST['sms']),
                 ((int) $_POST['catID']),
                 ((int) $_POST['deviceID']));
于 2011-07-30T12:59:55.013 回答
0

htmlentities();功能最好在显示来自数据库或 POST 的数据时使用,以保护用户和页面表单 XSS

插入数据库时​​,清理以保护数据库免受滥用,使用mysql_real_escape_string()

if(isset($_POST)){
    foreach($_POST as $key=>$value){
        if(get_magic_quotes_gpc()) {
            $value=stripslashes($value);
        }
        $_POST[$key]=mysql_real_escape_string($value);
    }
}

$query = "INSERT INTO sms (detail,catID,deviceID) VALUES ('".$sms."',".$_POST["catID"].",'".$_POST["deviceID"]."')";
于 2011-07-30T13:01:16.707 回答
-1

好的,为了完成讨论,找不到仅服务器端的解决方案......需要在客户端和服务器端进行修改。

这是我需要传递上传文本的方式(作为 newStr):

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
[request setHTTPMethod:@"POST"];

NSString *newStr = (NSString *)CFURLCreateStringByAddingPercentEscapes(
                                                                               NULL,
                                                                               (CFStringRef)uploadText.text,
                                                                               NULL,
                                                                               (CFStringRef)@"&",
                                                                               kCFStringEncodingUTF8 );

NSString *parameters = [[NSString alloc] initWithFormat:@"sms=%@&catID=%d&deviceID=%@",newStr,webCatID,[[UIDevice currentDevice] uniqueIdentifier]];

[newStr release];

而服务器端的这个修改:

    if ( get_magic_quotes_gpc() )
{
    $_POST['sms'] = stripslashes($_POST['sms'] );
}

$query = sprintf("INSERT INTO sms (detail,catID,deviceID) VALUES ('%s', '%d', '%s')",
                 mysql_real_escape_string($_POST['sms']),
                 ((int) $_POST['catID']),
                 mysql_real_escape_string($_POST['deviceID']));

特别感谢@PhpMyCoder 和@Shef

&大声笑的紧迫性!

于 2011-08-01T19:27:39.343 回答