it-swarm.com.de

Verhindert, dass die Fehlermeldung SQL anzeigt

In meiner Tabelle habe ich einen Index für 'col1' erstellt, um doppelte Einträge zu verhindern, was gut funktioniert, aber die resultierende Fehlermeldung, die einem Benutzer angezeigt wird, wenn er versucht, einen doppelten Eintrag hinzuzufügen, scheint mir ein Sicherheitsrisiko zu sein, da sie die SQL einschließlich anzeigt das Tabellenpräfix.

Gibt es eine Möglichkeit, Joomla daran zu hindern, die SQL in der Fehlermeldung anzuzeigen?

Ich habe versucht, die Einstellungen für die Fehlerberichterstattung in der globalen Konfiguration zu ändern, aber es hat keine Auswirkungen, soweit ich das beurteilen kann ...

Beispielnachricht:

Error

Speichern mit folgendem Fehler fehlgeschlagen: Doppelter Eintrag "Test" für Schlüssel "TestKey" SQL = INSERT INTO "jml_mycomp_tbl1" ("id", "col1", "ordering", "state", "created_by") VALUES ("0") , 'Test', '2', '1', '730')

10
doovers

Möglicherweise können Sie den Befehl try catch verwenden:

try
{
//Your code to run the SQL here 
}
catch (Exception $e)
{
$this->setError('The error message you want');
return false;
}
6
Tuan Pham Ngoc

Da es nicht möglich zu sein scheint, dieses Verhalten zu verhindern, habe ich die folgende Lösung implementiert. Fügen Sie einer Überschreibung der JTablecheck -Methode eine doppelte Prüfung hinzu:

// Check for duplicate entry
$db = JFactory::getDbo();
$query = $db->getQuery(true);

$query->select('COUNT(*)');
$query->from($this->get('_tbl'));
$query->where($db->quoteName('col1') . ' = ' . $db->quote($this->col1));

$db->setQuery($query);
$result = $db->loadResult();

if ($result) 
{
    $this->setError(" Duplicate entry for col1 = '" . $this->col1 . "'");
    return false;            
}
3
doovers

Sie sollten Ihren Code ändern, der die Einfügung veranlasst, zuerst auf Duplikate zu prüfen und dem Benutzer einen korrekten Fehler (einen, den Sie schreiben) zurückzugeben, und sich nicht darauf verlassen, den tatsächlichen Fehler anzuzeigen, der von MySQL zurückgegeben wird.

1
Ivo