#631: Derselbe Vorschlag (gleicher Agent, gleiches Werkzeug, gleiche Argumente unabhaengig von Schluesselreihenfolge) wird nicht erneut angelegt - der Agent erfaehrt die bestehende Nummer. Offene Vorschlaege verfallen nach 24 h (Status Expired). #609: Werkzeuge koennen den Freigabeschluessel aus dem Inhalt bestimmen (IAgentTool.StagingAktion). Database: SELECT/SHOW/DESCRIBE -> query, INSERT/UPDATE/DELETE -> write, DDL -> schema; write und schema sind freigabepflichtig. Ausgefuehrt wird nach Statement-Art, schreibende Statements melden die Zeilenzahl. #579: Database-Vorpruefung (Zugriffsebene, Tabellenfreigabe, SqlGuard) - was das Werkzeug ablehnen wuerde, kommt nicht mehr in die Freigabeliste. #610: SqlGuard ueberspringt IF [NOT] EXISTS und erkennt DESCRIBE/DESC <tabelle>. #632: WebFetch fetch mit filter liefert aus JSON/JSONP nur passende Eintraege; beim Blaettern durch grosses JSON empfiehlt der Hinweis den filter. Version 0.1.10. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -22,6 +22,30 @@ public sealed class SqlGuardTests
|
||||
// Angriffe — alle müssen abgelehnt werden
|
||||
// ═══════════════════════════════════════════════════════════
|
||||
|
||||
// ─── #610: wiederholbares Anlegen und Strukturabfragen ───
|
||||
|
||||
[Theory]
|
||||
[InlineData("CREATE TABLE IF NOT EXISTS prices (id INT)", SqlOperation.Schema)]
|
||||
[InlineData("DROP TABLE IF EXISTS prices", SqlOperation.Schema)]
|
||||
[InlineData("DESCRIBE prices", SqlOperation.Read)]
|
||||
[InlineData("DESC prices", SqlOperation.Read)]
|
||||
[InlineData("SHOW COLUMNS FROM prices", SqlOperation.Read)]
|
||||
public void IF_NOT_EXISTS_und_Strukturabfragen_nennen_die_richtige_Tabelle(string sql, SqlOperation operation)
|
||||
{
|
||||
var result = Inspect(sql);
|
||||
|
||||
result.IsValid.ShouldBeTrue(result.Error);
|
||||
result.Operation.ShouldBe(operation);
|
||||
result.Tables.ShouldBe(["prices"]);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("CREATE TABLE IF NOT EXISTS users (id INT)")]
|
||||
[InlineData("DROP TABLE IF EXISTS users")]
|
||||
[InlineData("DESCRIBE users")]
|
||||
public void IF_EXISTS_und_DESCRIBE_oeffnen_keine_fremde_Tabelle(string sql)
|
||||
=> Inspect(sql).IsValid.ShouldBeFalse();
|
||||
|
||||
[Theory]
|
||||
[InlineData("DELETE FROM users -- prices")]
|
||||
[InlineData("DELETE FROM users /* prices */")]
|
||||
|
||||
Reference in New Issue
Block a user